Go-Advance 总结
2020-11-25
| 2023-7-17
0  |  0 分钟
type
status
date
slug
summary
tags
category
icon
password
看完了 go-advice, 记录下一些要点和自己值得注意的地方。

Go 箴言

  • 不要通过共享内存进行通信,通过通信共享内存
  • 并发不是并行
  • 通道编排;互斥体序列化
  • 接口越大,抽象就越弱
  • 使零值有用
  • interface{} 什么也没说
  • Gofmt 的风格不是人们最喜欢的,但 gofmt 是每个人的最爱
  • 一点点复制比一点点依赖更好
  • 系统调用必须始终使用构建标记进行保护
  • 必须始终使用构建标记保护 Cgo
  • Cgo 不是 Go
  • 对于不安全的 package,没有任何保证
  • 清楚比聪明更好
  • 反射永远不清晰
  • 错误就是价值观
  • 不要只检查错误,还要优雅地处理它们
  • 设计架构,命名组件,记录细节
  • 文档是供用户使用的
  • 不要恐慌
Author: Rob Pike See more: https://go\-proverbs.github.io/

Go 之禅

  • 每个 package 实现单一的目的
  • 显式处理错误
  • 尽早返回,而不是使用深嵌套
  • 让调用者选择并发
  • 在启动一个 goroutine 时,需要知道何时它会停止
  • 避免 package 级别的状态
  • 简单很重要
  • 编写测试以锁定 package API 的行为
  • 如果你觉得慢,先编写 benchmark 来证明
  • 节制是一种美德
  • 可维护性
Author: Dave Cheney See more: https://the\-zen\-of\-go.netlify.com/

代码

chan struct{} 来传递信号, chan bool 表达的不够清楚

刚开始使用Go时,需要使用chan来传递一个信号时,并没有一个明确的约束,chan intchan bool等,都在使用。
但使用struct{}时是最推荐的,字面量struct{}代表了空的结构体类型,空结构体类型变量不占内存空间,内存地址相同,既不包含任何字段也没有任何方法。该类型的值所需的存储空间几乎可以忽略不计。相比其他类型,也可以一目了然是用来传递信号的。

30 * time.Second 比 time.Duration(30) * time.Second 更好

需要将无类型的 const 包装在类型中,编译器会找出来。最好将 const 移到第一位:

用 a := []T{} 来简单初始化 slice

相比 make 这样的写法更快捷,可以借鉴。

从一个 slice 生成简单的随机元素

Golang
  • Golang 基础
  • 使用coding自动同步和部署Github项目range 数组和切片的差异
    目录