Go语言第一课

# 基础概念

# 设计哲学

  • 简单是指 Go 语言特性始终保持在少且足够的水平,不走语言特性融合的道路,但又不乏生 产力。简单是 Go 生产力的源泉,也是 Go 对开发者的最大吸引力;
  • 显式是指任何代码行为都需开发者明确知晓,不存在因“暗箱操作”而导致可维护性降低和不 安全的结果;
  • 组合是构建 Go 程序骨架的主要方式,它可以大幅降低程序元素间的耦合,提高程序的可扩 展性和灵活性;
  • 并发是 Go 敏锐地把握了 CPU 向多核方向发展这一趋势的结果,可以让开发人员在多核时 代更容易写出充分利用系统资源、支持性能随 CPU 核数增加而自然提升的应用程序;
  • 面向工程是 Go 语言在语言设计上的一个重大创新,它将语言要解决的问题域扩展到那些原 本并不是由编程语言去解决的领域,从而覆盖了更多开发者在开发过程遇到的“痛点”,为开 发者提供了更好的使用体验。

# Go Runtime

Runtime 负责实现 Go 的垃圾收集、并发、内存堆栈管理等功能,会和客户代码一同编译并链接到目标程序中。

# 标准布局

1
2
3
4
5
6
7
single-exe-layout
├── go.mod
├── internal/
├── main.go
├── pkg1/
├── pkg2/
└── vendor/

# 初始化次序

  • 依赖包按“深度优先”的次序进行初始化;
  • 每个包内按以“常量 -> 变量 -> init 函数”的顺序进行初始化;
  • 包内的多个 init 函数按出现次序进行自动调用。

# 常用命令

1
2
3
4
# 查询目标包版本
go list -m -versions github.com/sirupsen/logrus
# 下载目标版本 (gopath)
go get github.com/sirupsen/[email protected]

# References

  • Go 语言第一课 - 极客时间
Get Things Done
Built with Hugo
Theme Stack designed by Jimmy