1:有缓存channe和无缓冲channel重要区别,有缓存的话,不及时拿出来不会死锁,否则会死锁
2.channel 支持 for-range的方式进行遍历,请注意两个细节
1)在遍历时,如果channel没有关闭,则会出现deadlock 的错误
2)在遍历时,如果channel已经关闭,则会正常遍历数据,遍历完后,就会退出遍历
3)不使用for进行遍历,假如使用for进行遍历长度为100的channel数据,最后拿出来的只有50条
WaitGroup总共有三个方法:Add(delta int),Done(),Wait()。简单的说一下这三个方法的作用。
Add:添加或者减少等待goroutine的数量;
Done:相当于Add(-1);
Wait:执行阻塞,直到所有的WaitGroup数量变
p成 p
proto生成go文件命令:
在使用 protoch 生成 Go 代码之前,需要先安装 protoc 工具和 Go 的 protoc 插件。具体安装步骤和使用方法可以参考官方文档。
假设已经安装好了上述工具,那么可以使用以下命令生成 Go 代码:
复制protoc --go_out=. <proto文件路径>
其中,--go_out
参数表示生成 Go 代码,.
表示生成的代码文件放在当前目录下,<proto文件路径>
表示需要生成代码的 proto 文件路径。
如果需要生成 gRPC 的代码,可以加上 --go-grpc_out
参数,例如:
复制protoc --go_out=. --go-grpc_out=. <proto文件路径>
这样就可以生成包含 gRPC 服务端和客户端代码的 Go 文件。