
go
文章平均质量分 82
蚊子2050
111111111111
展开
-
Protobuf 的 proto3 与 proto2 的区别
转自:https://solicomo.com/network-dev/protobuf-proto3-vs-proto2.html这是一篇学习笔记。在粗略的看了 Protobuf 的文档中关于 proto2 和 proto3 的说明后,记录下了几点 proto3 区别于 proto2 的地方。总的来说,proto3 比 proto2 支持更多语言但 更简洁。去掉了一些复杂的语法和特性,更强调约定而弱化语法。如果是首次使用 Protobuf ,建议使用 proto3 。在第一行非空白非注释行,必须写:转载 2021-04-30 14:33:14 · 1857 阅读 · 0 评论 -
GO中的sync.waitgroup的用法
sync.waitgroup的基本用法waitgroup类似于C中的信号灯,也可以理解成队列,基本的操作包括 add(int) 增加信号的值,add的参数应该都为正数 done() 减少信号的值,相当于add(-1) wait() 等待信号值为0,等待期间会一直阻塞waitgroup与channel产生的死锁当同时使用了waitgroup和channel的话,要特别注意waitgroup原创 2016-12-09 12:20:17 · 1878 阅读 · 0 评论 -
GO中chan的理解
chan的分类分为带缓存和不带缓存这2类,尤其需要关注带缓存的用法,防止掉坑里。不带缓存 make(chan 数据类型)带缓存 make(chan 数据类型,长度)例如定义一个带缓存的chan: ch := make(chan int,2) 这里我们定义个缓存长度为2的chan,当我们已经往chan中写入了2个数据,当再次写入第三个数据的时候就会发送阻塞,直到其他人从该chan中读取了数原创 2016-12-09 10:47:18 · 6592 阅读 · 0 评论 -
chan的理解
chan分为带缓存和不带缓存这2类,尤其需要关注带缓存的用法,防止掉坑里。1.带缓存的定义方法为: make(chan 数据类型,缓存长度)。例如定义一个带缓存的chan: ch := make(chan int,2)这里我们定义个缓存长度为2的chan,当我们已经往chan中写入了2个数据,当再次写入第三个数据的时候就会发送阻塞,直到其他人从该chan中读取了数据,那么才可以原创 2016-12-09 10:21:09 · 1431 阅读 · 0 评论 -
如何下载golang.org/x包
golang.org/x包放到了https://github.com/golang/text中,下载时需要先在本地建立golang.org/x的目录后,再下载。mkdir -p golang.org/xgit clone https://github.com/golang/text.git或go get github.com/golang/text后将包移到x目录原创 2017-11-08 12:03:05 · 11622 阅读 · 0 评论 -
go rand.read的用法
golang的随机包 rand.go 中我们可以看到 rand.Read 其实是调用的io.Reader.Read() 1: // Package rand implements a cryptographically secure 2: // pseudorandom number generator. 3: package rand 4: 5转载 2018-01-04 14:07:33 · 6308 阅读 · 0 评论 -
GO学习笔记1
1.多变量赋值规则多变量赋值时,先计算左边的所有值,然后从左到右依次赋值。data, i := [3]int{0, 1, 2}, 0 i, data[i] = 2, 100 // (i = 0) -> (i = 2), (data[0] = 100) 2.iota的用法iota从0开始计数,按行计数,是一个自增的常量值。 同一个常量组中可以提供多个iota,他们各...原创 2018-05-17 20:15:21 · 221 阅读 · 0 评论 -
GO学习笔记2
print类方法fmt/log包中的print类方法会隐式的调用变量的String方法(如果变量有String方法会优先调用该方法)。defer使用技巧使用defer实现记录方法的开始和结束 func bigSlowOperation() { defer trace("bigSlowOperation")() //要注意最后这块有个括号 ...原创 2018-05-17 20:18:53 · 163 阅读 · 0 评论 -
GO中使用select实现优先级队列
select的基本用法select会监听IO操作,当IO操作发生时会触发相应的动作,如果没有发生符合条件的IO操作则执行default分支,如没有default分支则一直阻塞。ch1 := make(chan int,1)ch2 := make(chan int,1)select { case <- ch1: fmt.Println("recv from...原创 2018-07-24 14:22:43 · 2084 阅读 · 1 评论