Go 1.14 新特性之 Goroutine 抢占式调度

2020-04-29
阅读 2 分钟
8.4k
我们分析一下程序执行过程,设置 P 数量以后,执行打印 The program starts ...,之后将匿名 goroutine 加入调度队列,执行 Sleep 操作,在 sleep 过程中调度器会将 main goroutine 从唯一 P 中让出,执行匿名 goroutine,而这个 goroutine 是无限循环,并且中间没有函数调用,导致调度器无法插手把它让出继续执行 main...

Protobuf 的 import 功能在 Go 项目中的实践

2019-12-31
阅读 4 分钟
27.5k
我们会有这样的需求:在不同的文件夹中定义了不同的 proto 文件,这些不同的文件夹可能是一些不同的 gRPC 服务。因为不想重复定义某一个 message,所以其中一个服务可能会用到其他服务中定义的 message,那么这个时候就需要使用到 proto 文件的 import 功能。

理解服务端对 TCP 握手的处理,以及什么是 backlog

2019-12-24
阅读 4 分钟
4.7k
理论 握手过程 我们知道,客户端与服务端之间建立 TCP 连接需要经过三次握手的过程: 客户端向服务端发送 SYN 服务端返回 SYN + ACK 客户端发送 ACK 至于 TCP 连接为什么需要三次握手,这三次握手是怎样确保传输的可靠性的? 这个问题,请阅读这篇文章。 而这篇文章的重点是,在这三次握手的过程中,服务端是怎样维护一...

Go 切片的 append 操作总结

2019-08-23
阅读 2 分钟
4.7k
切片有 len 和 cap 两个属性,代表切片的引用长度和切片的容量(从切片的引用起点位置到其底层数组最末端的长度。因为其底层数组的长度是固定的,这也就是意味着容量是指切片可引用的最大宽度)。

Go 的包与编译时的依赖包查找机制

2019-08-15
阅读 1 分钟
4.5k
目录和目录下源文件的包命名可以不同,目录被导入时只是提供包的路径而已;若目录名称和目录下包名称不同,当目录被导入时不必为包起别名即可在下文中使用包,当然,使用方式不是以目录名为前缀,而是以目录下的包名为前缀,不过这会导致读代码时不知道该包是来自哪个路径。所以一般规范的写法是保持目录和目录下的包名...