转到后端差不多也快三个月了,拿 golang 糊代码的时间算上自己平时写的一些练手 demo 加起来差不多也有一个月。
这将近一个月的时间过来差不多能体会到 golang 的设计精髓,那就是:simple & stupid, being convenient as the first class support.
换句话说就是:短平快糙猛,满口玻璃渣,怎么方便怎么来。
所以接下来不免俗地是吐槽 golang 设计的内容。
吐槽不考虑 PLT 上的设计,纯粹从日常堆业务逻辑出发。毕竟理论的东西我一个鶸也不懂,且 golang 的设计目的就是方便应届毕业生快速堆业务代码。
以下吐槽点的顺序为自己在实际中遇到的顺序逆序。
Flaky Goroutines
golang 里起一个 goroutine 很方便,但是目前感觉 goroutine 太过于 flaky,有点飘。一旦没用 chan struct{}
或者 sync.WaitGroup
”固定好“,就总有一种这玩意儿是不是已经脱离自己手心的感觉。
另外不知道是不是很多用 golang 的人之前都是 php / python 的背景,相当一部分人其实对 goroutine-safe 没有什么概念。不过严格来说这个不是 golang 自身的问题。
Cannot assign to fields within short declaration notation
代码段
1 2 3 4 5 6 7 8 9 10 11 12 13
| func foobar() (bool, error) { return true, nil }
func main() { var err error ok, err := foobar() if err != nil { fmt.Println("error") } else { fmt.Println(ok) } }
|
是合法的,因为 ok
之前并没有被定义,所以这里 err
可以蹭着使用 :=
。