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/cn.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灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP