1.go對比java
go通過結構體嵌套+接口實現類似面向對象中的繼承和多態。個人認為尤其是go的接口抓住了多態的本質。而Go提倡的面向接口的思想也可能使得架構上更加解耦。
2.關於Go不要通過共享內存來通信,而應通過通信來共享內存的個人理解:
go通過channel來實現通信。按照大佬的說法,chan傳遞的是對數據的訪問權限。chan底層是一個隊列,傳入時為值拷貝【如果傳入的是指針則拷貝指針的值】,因此在map,slice,chan時理解為傳遞的對同一份數據的訪問權限,即傳入chan后不應在原goroutine中操作數據。而當傳入其它類型時是真正的值傳遞,此時相當於內存拷貝了。這種情況下對比MQ,從某種意義上講上都是通過數據拷貝來共享內存了,用數據的冗余使得結構上更加解耦同時使CPU能更充分的利用,仍然是盡可能壓榨CPU的思想的體現。
而對於Don't communicate by sharing memory更類似與說的是利用Go本身的chan可實現並發安全,而不必要自己去使用類似鎖的方式來保證並發安全。
類似channel,Go很多標准庫的設計都非常簡單,但卻很好的解決了一些問題。
正如Go官方所說的,Go更像面向21世紀的帶網絡和並發的C。使用了面向過程的結構體,加方法接收者,接口實現了類似面向對象需要的功能。