看了go谚语的一篇文章,觉得其中列举的条目很有学习的意义,这里对文章的观点进行下总结和学习。原文:go谚语
1.不要通过共享内存进行通信, 通过通信共享内存 (Don't communicate by sharing memory, share memory by communicating)
java并发编发通过对对象加锁的方式来进行,线程访问共享变量要加锁,访问完毕后要进行锁的释放,线程之间争夺共享数据的访问。而Go 提供了goroutines 和 channels编发原语,使用goroutines和channels可以更优雅的来进行并发编程,这是属于并发编程模型中的CSP编程模型。
2.接口越大, 抽象越弱 (The bigger the interface, the weaker the abstraction)
接口是通过抽象对象的行为来允许重用,Go接口通常趋于小型化,一个接口通常是一到两个方法,这样才可以广泛使用,io包就是经典的例子。
3.充分利用零值 (Make the zero value useful)
零值的典型例子如 bytes.Buffer 和 sync.Mutex,变量声明后就可以使用,这和java有很大区别,java中的对象必须创建才可以调用对象的方法:
var buf bytes.Buffer
buf.Write([]byte("hello"))
fmt.Println(buf.String())
af
var mu sync.Mutex
mu.Lock()
mu.Unlock()
4.interface{} 言之无物 (interface{} says nothing)
该谚语不是说 interface {} 不代表任何东西, 而是说该类型无静态检查以及调用时保证, 比如你的 func 接收一个 interface{} 类型, 你写的时候是可用的, 但是某个时间你进行了代码重构可能坏掉了.
5.unsafe 包无保证 (With the unsafe package there are no guarantees)
你可以使用 unsafe 包如果你准备好了有一天它会坏掉.
6.清晰好过聪明 (Clear is better than clever)
Rob Pike 在他与别人合著的 <程序设计实践> 中写到: "写清晰的代码, 不要写聪明的代码".
7.错误也是一种值 (Errors are values)
值可以被编程, 并且由于错误是值, 所以错误可以被编程. Go 官方博客有对此的解读.不要止步于检查错误而要优雅的处理 (Don't just check errors, handle them gracefully)。Go语言的错误是当做值来进行处理,这就要求我们要对错误判断处理或者方法调用返回错误值交给上层处理。
8.不要慌 (Don't panic)
不要使用 panic 进行正常的错误处理. 使用错误 (error) 和多个返回值。除非致命的错误发生,我们都不应该使用panic来处理错误。