最近有認真讀了一下golang,感覺真的滿不錯的
針對現在的開發/佈署環境特性設計的,果然可以稱一下modern language
最吸引我的地方是套件及佈署的部份,因為這是我的痛點
在公司治理連年得名的地方,資安管理非常機車嚴謹!!!
NO YUM, NO FTP, NO INTERNET...
想像拔掉網路線把環境裝起來... 我是說真的(泣)
裝個PHP會裝起肖!!!
常遇到要裝1個rpm要抓30多個dependency packages
最近要升php 7... 真是瘋了!!!
p.s. 感謝有docker,雖然一樣得一個個rpm抓來裝,但已經方便多了
用java有好一點,只要把jar包進來就好,但maven一樣沒辦法直接抓
另外也被規定只能用jboss,對mircroservice而言不太適合
再者java開發挺花時間,要多寫很多code
以前沒感覺,接觸Coding Convention後,就真覺挺花時間的
還有還有~ compile花時間... 用慣PHP,再回來寫java就覺得開發很慢
如圖
抱怨了好多,快來看一下,只留自己想講的
其他看文章
Reference
針對現在的開發/佈署環境特性設計的,果然可以稱一下modern language
最吸引我的地方是套件及佈署的部份,因為這是我的痛點
在公司治理連年得名的地方,資安管理非常
NO YUM, NO FTP, NO INTERNET...
想像拔掉網路線把環境裝起來... 我是說真的(泣)
裝個PHP會裝起肖!!!
常遇到要裝1個rpm要抓30多個dependency packages
最近要升php 7... 真是瘋了!!!
p.s. 感謝有docker,雖然一樣得一個個rpm抓來裝,但已經方便多了
用java有好一點,只要把jar包進來就好,但maven一樣沒辦法直接抓
另外也被規定只能用jboss,對mircroservice而言不太適合
再者java開發挺花時間,要多寫很多code
以前沒感覺,接觸Coding Convention後,就真覺挺花時間的
還有還有~ compile花時間... 用慣PHP,再回來寫java就覺得開發很慢
如圖
抱怨了好多,快來看一下,只留自己想講的
其他看文章
Reference
- Simple
- 效能
- 簡易的library管理
Go 原生大多數的Library, 還沒真的拿來開發所以還沒遇過,但即使沒有,看起就像npm裝一下就好了
沒有對外的網路,也是把library抓進來放就搞定
這對我太重要了!!! - 易部署
compile後,只有一個binary檔案,不用再zip有的沒的
感覺沒什麼,不就是少寫一些deploy script!?
嘖嘖!這可以大大減少維護成本呀!!!
公司治理連年得獎的公司,上線一定還有Rollback plan,有時舊沒跑,真發生問題還不敢執行
而且這種公司一定有分權限,寫script的人,跟實際執行的人一定不同人
也就是說出錯了,懂的人看不到,看到的人不懂... 讓我死算了...
而且而且
Go把Code及library整個包進去,不同環境的Server不需要安裝套件就可以執行
光這點就不知道為此付多少血淚,我可以擺脫rpm dependency hell了!!! (泣)
- 更易用,更強大的執行緖 - Goroutines
Goroutine就像輕量級的執行緒,但稱其為併發,效能都是原生級的,範例如下
func main {
go loop //併發,程式會繼續往下走
}
跟java寫thread比起來,還真的更簡單,嘖嘖
- 沒有Exception
我一直推不要用error code來判斷,用try-catch
try放happy path, exception就放exception,這樣程式碼很乾淨
沒想到golang居然沒有!?
一開始還滿難想像,也很難接受,本以為是一群怪咖對c狂熱導致
仔細讀一下,似乎還滿有道理的
作者認為try-catch-finally會導致convoluted code (不會翻譯,盤旋形的程式碼... 嗯 大概有抓到意思)
最後直接比一下,似乎還真的比較"simple"
//java try { } catch (Exception ex) }
//go if err != nil { // handle the error }
如果有多個就用switch,替代多個exception也是夠
不過敢拿出來嗆是因為go有multi-value returns,還真的挺方便的if err != nil { switch err.(type) { case *ErrZeroDivision: fmt.Println(err.Error()) default: fmt.Println("What the h* just happened?") } }
如下例算平方根,如果只能return數字,那靠throw exception會比較好接
但如果可以分別回error及result,那就很好接了
func Sqrt(f float64) (float64, error) { if f < 0 { return 0, errors.New("math: square root of negative number") } // implementation } f, err := Sqrt(-1) if err != nil { fmt.Println(err) }
好像真有點被說服了...
讓我想起一位前輩說,科技進步,有時會推翻像地球是平的那種不可能改變的想法
Reference
- No type hierarchy
很多新觀念得再讀了
沒有留言:
張貼留言