Go Error 的设计哲学

最近阅读了不少关于 Go 错误处理的材料和讨论,总结出 Go Error 的设计哲学主要有两点:

  • 处理所有潜在的错误
  • Errors Are Value

Go 对错误处理的最初设计和后续优化方案,以及编程过程中处理错误的各种方法,基本都是围绕着这些理念展开的。

Read more...

Go 网络编程的实现

提要:

  • TCP 服务端、客户端示例
  • Network system calls
  • TCP 编程是如何实现的

Go 网络编程主要通过 net 包(package)实现,它支持 TCP/IP, UDP, domain name resolution, Unix domain sockets 等连接,此外,还通过 net/http ,net/rpc 等提供了 http,rpc 等主流应用层的连接协议。

Read more...

Go 源码分析:scheduler 工作流程

注:本文涉及的源码为 go 1.13 版本

最近一直在看 Go 调度器的源码,查了不少资料,对 goroutine 的调度过程有了一些了解,也对 Go 如何支撑高并发、并行计算有个大概的认识。

Go 调度器(scheduler)负责把各个 goroutine 分配到相应的操作系统线程 (OS thread )上执行,是 Go runtime 的两大组成部分之一,另一个是内存分配/垃圾回收(memory allocator/garbage collector)1

调度器相关的代码主要在 runtime proc.goruntime1.goruntime2.go 等几个文件,此外还有一些 Go 汇编代码,这些代码大部分在 2015 年成形,至今没有大的修改,目前看来还是比较稳定的。

Read more...

构建 Golang Web 应用的两种方法

对前后端分离的 web 项目,golang 后端可以以两种方式提供前端静态文件的访问:

  1. 使用 http.FileServer 提供静态文件服务
  2. 使用 go-bindata-assetfs 将前端静态文件打包成二进制数据,和后端构建到一起
Read more...