Go语言中文网 为您找到相关结果 6

make(chan int) 和 make(chan int, 1) 的区别

弄懂了下面的这个例子你就懂了 package main import "fmt" func main() { var c = make(chan int) var a string go func() { a = "hello world" <-c }() c <- 0 fmt.Println(a) } 上面的例子会打印 "hello world" 如果改成 var c = make(chan int, 1) a 可能是 "hello world" 也可能是空,我运行了好多次基本打印的都是空 make(chan int) 是 unbuffered channel, send 之后 send 语句会阻塞执行,直到有人 receive 之后 send 解除阻塞,后面的语句接着执行。 所以执行 c...阅读全文

博文 2019-02-14 09:39:26 lesliefang

Golang 数据结构之【4.7环形队列】

package main import ( "errors" "fmt" ) //循环队列 const ( MaxSize int = 20 // 存储空间初始分配量 ) type QElemType int // QElemType类型根据实际情况而定,这里假设为int // 循环队列的顺序存储结构 type SqQueue struct { data [MaxSize]QElemType front int //头指针 rear int //尾指针 } //初始化队列 func (q *SqQueue) InitQueue() { q.front = 0 q.rear = 0 } //清空队列 func (q *SqQueue) ClearQueue() { q.front = 0 q....阅读全文

博文 2019-05-17 06:34:40 JiBadBoy

堆实现的Top-K算法,元素流中筛选极值集合-博文

package main //@description 元素流中获取Top-K的元素,元素需实现Comple接口 //@author chenbintao //@data 2017-03-31 14:19 初稿 // 2017-03-31 17:44 编译验证通过 import ( "fmt" "log" ) //元素接口设计,参与排序的元素,需要实现接口内的方法 type ELEM interface { //比较当前元素与o元素大小,true:大于o Comple(interface{}) bool } /** TOP-K-Heap 用于从数据中筛选出前K极值元素 **/ type TopKHeap struct { heap []ELEM //物理上采用数组实现(接口即指针) size...阅读全文

博文 2017-05-05 04:42:19 hansegod

go channel总结

1、创建 无缓冲 var chs1 = make(chan int) var chs2 = make(chan float64) var chs3 = make(chan string) 有缓冲 var chs1 = make(chan int, 3) var chs2 = make(chan float64, 3) var chs3 = make(chan string, 3) 有缓冲和无缓冲的区别: 写数据时缓冲模式且缓冲未满时可以直接写入,不会阻塞,缓冲满时会阻塞等待对方读, 无缓冲模式写入会阻塞到对方读完数据 读数据缓冲模式可以读取缓冲已有的数据,否则需要阻塞等待对方写 无缓冲模式需要阻塞等待对方写 2、关闭 var chs1 = make(chan int) close(chs1)...阅读全文

博文 2016-04-29 21:00:02 chukuang2004

Go 通道

无缓冲区通道 通过make(chan xxx)创建,没有设置缓冲区大小,这种类型的通道会在两种情况下导致阻塞: 通道中无数据,但执行通道读操作。 执行通道写操作,但是无协程从通道中读取数据。 // 情况1 func ReadNoDataFromNoBufCh() { noBufCh := make(chan int) <-noBufCh println("read from no buffer channel success") } // 情况2 func WriteNoBufCh() { ch := make(chan int) ch <- 1 println("write success no block") } 有缓冲区通道 通过make(chan xxx, int)创建,并设置了缓冲...阅读全文

博文 2020-03-08 13:32:39 xiongkun01

Go通道笔记

package main import ( "fmt" "sync" "time" "unsafe" ) func main10() { done := make(chan struct{}) // 结束事件 c := make(chan string) // 数据传输通道 go func() { s := <-c // 接受消息 println(s) close(done) // 关闭通道,作为结束通知 }() c <- "hi!" // 发送消息 <-done // 阻塞,直到有数据或者管道关闭 } func main11() { c := make(chan int, 3) // 创建带 3 个缓冲槽的异步通道 c <- 1 // 缓冲区未满,不会阻塞 c <- 2 println(<...阅读全文

博文 2020-03-08 00:32:39 xiongkun01