Golang 学习资料汇总,从入门到放弃

入门 go的一些使用小例子 无闻讲师的基础视频 go入门指南 go web基础 effective go 进阶 go内存模型 go程序诊断 标准库 标准库文档 标准库包的使用例子 go语言标准库 书籍或阅读清单 go开发者阅读清单 深入解析Go go语言编程之旅 go语法树入门 go语言设计-欧长坤 gopher博客推荐 draveness,go底层实现原理,讲得很详细 鸟窝,rpcx作者博客,go并发编程专栏 煎鱼大大,可以关注下公众号 李文周的博客 曹春晖的golang笔记 峰云golang专栏 大彬的blog gophers推荐清单

十月 26, 2021 · nobject

golang channel

channel是golang中重要的组成部分。也是协程通信间通信的方式 channel常见理论面试题 channel 什么情况下会出现panic 试图往已close的channel继续发送 试图关闭已关闭的channel 试图关闭一个nil的channel 向为nil的channel发送数据会怎样 给定一个 nil channel c: <-c 从 c 接收将永远阻塞 c <- v 发送值到 c 会永远阻塞 channel close后读的问题 关闭后继续读数据,已在缓冲区内的可以读取到数据,而后得到的是零值(对于int,就是0)。 我们可以通过for循环遍历channel,来获取到已经写入的值 1 2 3 for _, v := range channel{ } 对于可能获取到零值,我们可以使用断言判断,ok为false代表channel已关闭后读取的 1 value, ok := <- channel 也可以在close channel之后有意将channel 置为 nil, 如此再使用,并不会读取到零值 对于不带缓冲的ch,和带缓冲的一样,channel close掉之后并不影响读,只影响写入 channel底层源码剖析 go的运行时源码在runtime/chan.go文件下,可以在该文件下查看具体的数据结构,send(channel <-),receive(-> channel),close channel等操作 数据结构 1 2 3 4 5 6 7 8 9 10 11 12 type hchan struct { qcount uint // total data in the queue 代表 chan 中已经接收但还没被取走的元素的个数。内建函数 len 可以返回这个字段的值。 dataqsiz uint // size of the circular queue 循环队列的大小 buf unsafe....

七月 25, 2020 · nobject