Soft_Job 板


LINE

不敢說會寫,只能說略懂,以下簡單分享。 先說覺得好的地方 1. 對 non-blocking 的封裝 大家都知道在 C/C++ 底下要寫出高併發性能的 server 很多細節是很麻煩的 你可能說寫 server 不就開個 socket 搭配 fork 多麼直觀 但現實是要達到好的性能就需要 select、epoll、kqueue 甚至 thread pool 之類的東西 但 non-blocking 的世界畢竟不是那麼直觀 Go 強的地方就在於他讓你用很直觀的 blocking 寫法 一個 client 進來你也就像 fork 一樣給他開個 goroutine 但實際上它底層 runtime 就是用 epoll/kqueue 幫你做掉 也幫你做這些 lightweight thread 的 scheduling 當然 C/C++ 的世界也有類似的 library 可以辦到,像是 Boost.Fiber 但 Go 裡面用 goroutine 搭配 channel 感覺就是優雅了些 不過 goroutine 還是有可能踩到坑的 例如 goroutine 就永遠卡在那邊,這點可以去了解一下它 scheduling 的實作 2. 簡單易寫、靜態語言 Go 的語法相當簡單,keyword 也非常少 等於說讓你用簡單易寫的方式有機會寫出接近 C 效能的應用程式 另外它還是個靜態語言,程式寫久了雖然動態語言寫起來爽 但到頭來私心還是覺得靜態語言更適合做大事 (戰) 3. 跨平台、易部署 有稍微寫過應該就知道,直接編成一個 binary 檔部署真的非常方便 cross-compile 也不是難事 說到覺得不好的地方反而好像可以列出更多 1. 缺少 generic 支援 這點有時候真的很麻煩,頂多只能拿 interface{} 湊合著用 印象中還看過有人還另外開發了一個 generic code generator 例如:https://github.com/cheekybits/genny 不過官方對於 generic 這個議題一直是 open for discussion 狀態 我相信 Go 2 是有機會出現的 討論串:https://github.com/golang/go/issues/15292 2. exception 處理 在 Go 的世界基本上 exception 都是透過 return value 在傳遞的 所以也經常可以看到這種嘲諷的圖片 https://i.imgur.com/EL0gEUD.jpg
有寫過的人看到這圖片一定很有感,程式裡四處都是 if err != nil 實在是每個 Go 開發者都應該有的按鍵! 3. 套件管理 這點在加入 vendor 資料夾的支援後稍微好了一些 也開始出現了一些第三方基於這個設計的 package management tool(例如 Glide) 官方在這部分其實也開始有了動作,未來應該會由 dep 一統天下 dep: https://github.com/golang/dep 而關於套件另一個惱人的問題則是 import path import "github.com/user/repo/..." 今天如果 upstream 改了 path 就準備炸裂 而且這也讓 open source contribution 麻煩了許多(當你 fork 時) 相關抱怨文:https://bit.ly/2uNrXnA 4. 龜毛 Go 有個我覺得很討厭的堅持 就是如果程式裡有宣告了卻沒有使用到的變數會直接 compile error 動機是想增進 code quality 是好的沒錯 但有時你如果只是為了 debug 這點實在很煩人...... 我覺得整體來說還是 Z>B 只是到底換了 Go 是不是能讓你有 gain,這點還是要好好評估的 或許你根本也不知道你的 bottleneck 在哪,只是覺得潮~ -- ※ 文章網址: https://webptt.com/m.aspx?n=bbs/Soft_Job/M.1522768021.A.54E.html ※ 編輯: LinuxKernel (104.238.184.249), 04/03/2018 23:08:03
1F:→ robler: go以後應該還是會加進那些常用的功能 04/03 23:12
2F:→ robler: 但是他的優點其它的語言也是學的很快 04/03 23:12
3F:推 hl4: 我以為goroutine是用coroutine的方式實作的 04/03 23:14
4F:→ PUTOUCHANG: Mazin Go~ 04/03 23:41
5F:推 foodordertw: 應該説同步和非同步寫法比較精確 04/04 00:04
6F:推 hung0724: 真的滿滿都是 if err != nil 04/04 00:04
7F:→ foodordertw: blocking vs non-blocking 通常比較指單一function 04/04 00:04
8F:→ foodordertw: blocking的function也還可以非同步programming 04/04 00:06
9F:→ foodordertw: 但是寫的會非常辛苦 寫過一次 就不會想再寫 04/04 00:07
10F:→ foodordertw: trylock,select就是幫你減少blocking機會 04/04 00:08
11F:→ y3k: 那個按鈕應該有Plugin支援了吧XD 04/04 04:32
12F:→ Darkautism: 你的id和你的內文很衝突。linus明明在公開信中都談到 04/04 11:09
13F:→ Darkautism: 這些c++特性是無關緊要的,你卻反而認為是缺點? 04/04 11:09
14F:→ Darkautism: 寫linux kernel也是一層層return值回乎,這點go一樣的 04/04 11:10
15F:→ Darkautism: 你如果沒有辦法堅持本人的觀點就不要掛名,做事做一半 04/04 11:11
16F:→ PUTOUCHANG: 殺小連唉滴都可以戰 04/04 18:46
17F:推 wendly777: 沒有generic是我最討厭的地方,再來是沒有overloading 04/05 17:32







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP