
go
hsc_1
这个作者很懒,什么都没留下…
展开
-
sync.RWMutex 解决读写问题
在一个共享的数据需要被多个线程访问的时候就会出现很多读写问题(由于读写问题有很多变种,所以用许多来形容)。有两种类型的线程需要访问数据—读线程和写线程。读线程仅仅读数据,写线程修改数据。当写线程有权限访问数据的时候,其他线程(包括读线程和写线程)是不可以访问这个共享的数据。这个限制在日常生活中是真的发生的,当写线程无法以原子性的操作修改数据的时候,读线程必须被阻塞,以防读取到脏数据(译者注:为了使...原创 2019-11-16 17:35:53 · 2372 阅读 · 0 评论 -
你真的懂Go的切片吗?
介绍Go中的切片提供了一种方便、有效的处理一系列特定类型值的方式。切片在其他语言中和数组是相似的,但是有一些不同的特性。这篇文章将会讨论切片,以及如何使用它们。数组在go中切片是建立于数组之上的,所以在理解切片之前,我们必须先理解数组。数组在定义的时候需要明确长度和元素的类型。例如,类型[4]int表示的是一个长度为4的数组。数组的长度是固定的,长度是数组类型的一部分。也就是说[4]int...原创 2019-11-03 11:40:13 · 571 阅读 · 0 评论 -
go解析json
package mainimport ( "bytes" "encoding/json" "fmt" "path/filepath" "regexp" "runtime")type Contact struct { Name string `json:"name"` Title string `json:"title,omitempty"` Contact struc...原创 2019-06-18 21:28:13 · 3761 阅读 · 0 评论 -
Go中的无缓冲channel
package mainimport ( "fmt" "math/rand" "sync" "time")func init() { rand.Seed(time.Now().UnixNano())}var wg sync.WaitGroupfunc player(name string, court chan int) { defer wg.Done() fo...原创 2019-06-15 10:11:58 · 281 阅读 · 0 评论 -
go 利用channel进行接力赛
package mainimport ( "fmt" "sync" "time")var wg sync.WaitGroupfunc Runner(baton chan int) { var newRunner int runner := <- baton fmt.Printf("Runner %d runs with baton\n", runner) i...原创 2019-06-15 10:46:40 · 261 阅读 · 0 评论 -
有缓冲的channel
package mainimport ( "fmt" "math/rand" "sync" "time")const ( numberGoroutines = 4 taskLoad = 10)var wg sync.WaitGroupfunc init() { rand.Seed(time.Now().Unix())}func worker...原创 2019-06-15 11:06:09 · 708 阅读 · 0 评论 -
go中的select
go中的select提供了一种方式来处理多个channels,select语句满足如下条件每个channel的值都会被计算如果没有channel有产出的话,会阻塞直到一个channel产出如果多个channel有产出的话,会选择假随机(pseudo-randomly)的选择一个产出在有default语句的情况下,没有channel准备好的时候,会立即执行default的语句下面有一个...原创 2019-07-16 21:23:53 · 835 阅读 · 0 评论