青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-90  評論-947  文章-0  trackbacks-0

(原發于 GitHub Pages,2019-01-01 23:22:43)

2019 年,我回來了。

不知不覺中,我入 PHP 的坑已經 3 年有余,入 Go 的坑也大半年了。作為不評論不舒服斯基星人,自然要對 Go 品頭論足一番的。

總的一句話,Go 的一些特性確實恰到好處,然而更多的地方卻是平庸、繁瑣、束縛,以至于我想不到它是適合哪些場景的。

靜態語言里,C、C++ 有著明顯的適用領域:你要想老老實實寫程序,不玩任何花招,就用 C 吧,至少你能掌控一切,實在想玩你還有宏這個大殺器;你要想玩點花招,那就用 C++,代價就是需要自身水平更高,能掌控到多大層次就寫多大層次,不懂的不要不懂裝懂去用,總體來說還是安全的。

腳本語言里,如果要隨便寫點什么工具,python 啥的挺方便的;寫點網絡的,就用世界上最好的語言 PHP 吧。什么?你說 Java?實在沒辦法,體量太大,公司要你用你就用吧。不過就其本質而言,其實 Java 和今天的主角——Go 是同一類的。不是說他們語法像,是指應用場景(不過這個領域拿 PHP 寫顯然會更爽)。

嗯——為了表達出真實的意思,我想用詞稍微犀利點,請先做一下心理建設。

我不怎么懂 Java,就我淺薄的了解而言,如果你的公司、團隊有很多傻逼,甚至你自己也是,業務上又正好可以用 Java 界的一些現成的框架、組件,那么用 Java 肯定是沒錯的啦。它確實有一種魔力,讓你無論多傻逼,也絕對寫不出錯得多么隱蔽、精妙無比的代碼;同時讓你無論多牛逼,也寫不出多么精彩絕倫、言簡意賅的代碼。Go 也有這種特質,甚至有些地方比起 Java 更有過之而不及。不信請看:

別人家的寫法:

r = f(p1, p2 != null ? p2 : p3)
$r = f($p1, $p2 ?? $p3) 

Go 家的寫法:

var r someType
if p2 != nil {
	r = f(p1, p2)
} else {
	r = f(p1, p3)
}

為什么要設計成這樣?Go 爸爸說:你們有些人啊,會嵌套很多層 ?:,導致代碼可讀性太差啦,于是禁止你們使用 ?:,這是家法。在這里,作為熊孩子的代表,我來告訴大家怎樣寫出讓 Go 爸爸無語的代碼:

	foo := 1
	bar := 2
	var foobar int
	if foo > bar { if bar > 1 { foobar = 1 } else if bar < 0 { foobar = 2 } else { foobar = 3 } } else { if foo >= 3 { foobar = 4 } else { foobar = 5 } }

怎么樣?可讀性差不差?

看到了吧,這種傻逼是防不住的,他愿意把 ?: 嵌套好多層,它同樣可能會把 if else 嵌套好多層。有素質的人會怎么做?遇到 ?: 嵌套太多立馬拆成 if else。所以結論是,即使去掉 ?:,傻逼還是傻逼,但是正常的人寫代碼就會很啰嗦;支持 ?:,傻逼還是傻逼,正常人用起來爽。要知道一層 ?: 的場景占所有 ?: 場景的比例還是很高的吧。我覺得可以這樣,Go 爸爸可以統計一些工業級代碼庫的 ?: 嵌套層數,作為數據支撐(比如自家 Chrome 里一層 ?: 占 95%,兩層占 4.9),然后再在語言層面只支持一層 ?:,編譯參數可選打開兩層,不支持兩層以上。這就功在千秋了。

除了 不支持 ?:,Go 爸爸還有很多這樣的設計,隨便舉幾個例子:

  1. 不支持默認參數
  2. 不支持運算符重載
  3. 不提供 goroutine id(以及 gls、可重入鎖)

特別是第三點,也是這種思路,因為你們可能會濫用,所以我不提供。類似這種“爸爸思路”,是我今天要噴的最大噴點。前兩點也許是抄 Java 的,不怪 Go 爸爸。

綜上,Go 爸爸通過扼殺一些基本語法或者一些基礎信息,來防止傻逼干壞事,同時讓正常人用起來很啰嗦,同時還可能防止不了傻逼干壞事。這跟 Java 通過不提供高級語法來防止傻逼干壞事是師出同門啊,而且他們正好都能寫網絡服務程序,你說它們像不像?

然而,Go 爸爸也有精分的時候,它居然發明語法糖了耶!比如 if 可以執行一個句句。單就這個語法而言,我的態度是中立偏贊。贊是贊 Go 爸爸確實用過心了,某些時候挺方便,還能縮小變量作用域;不過這個總歸是可有可無的,畢竟換一行寫也不會死,要變量作用域加個大括號就行。

小語法方面倒是有個亮點,那就是 switch 的隱式 break、顯式 fallthrough 處理。不多展開了。

除了防傻逼,Go 爸爸還有一個思路,就是只許州官放火,不許百姓點燈。有兩個語法點——

  1. 泛型
  2. 逗號ok斷言

先說泛型吧。不支持泛型其實我挺能理解的,因為他確實比 ?: 復雜多了,傻逼用不起,?: 都沒有,怎么可能會有泛型呢。然而 Go 爸爸有特權呀,它的 map、chan 可都是泛型的哦。但是你要寫一個泛型的語法結構的話,對不起沒有。

再說逗號ok斷言,同樣 Go 爸爸要得起,我們要不起。其實我更想要一個這樣的語法:當返回值是 xxx, ok 或者 xxx, err 的時候,我如果用一個返回值接,那么就返回第一個,以便鏈式調用,同時 !ok 或者 err != nil 的時候 panic。

以上兩小點雖然是在噴,不過還好啦。無所謂的。下面講幾個大的方面。

代碼組織

我特別贊賞 Go 對于 package 級嚴格的循環依賴檢查。然而如果加上其他規則:

  • 一個目錄一個 package
  • 不同路徑下的同名目錄也是不同 package
  • go 代碼無法拆成 .h、.cpp

實際可操作性就會非常差。要拆 package,就要把依賴關系梳理得特別嚴格,半點不得馬虎。這對工一般的程代碼來說是個極大的挑戰。

我更傾向于做成函數級循環依賴檢查,或者不限制(畢竟遞歸函數也是要支持的嘛)。

這部分,中立偏噴,偏噴是因為 Go 爸爸用了我的小名 internal。

OOP

我特別贊賞 Go 對于 OOP 泛濫成災的思考與探索,以及對于終結這陣 Java 帶來的不正之風的決心。怎么可能萬物都是 class 呢。但同時,Go 還是有點矯枉過正的,如果我需要利用傳統的 OOP 來搞事情,就非常麻煩,你甚至都無法寫出一個框架來。你只能寫庫讓別人用。雖然我也不喜歡框架,但有的時候是需要框架的。

defer 非常切中痛點,特別解決一堆錯誤 return 外加資源釋放的問題。相比之下C 里只能用 goto,C++ 本身不支持但可以玩出 LOKI_ON_BLOCK_EXIT 或者 BOOST_SCOPE_EXIT。defer 一舉解決問題。(要是能再增加命名 defer 以及撤銷 defer 的功能就更好了。沒錯,你也許看出來了,我覺得 LOKI_ON_BLOCK_EXIT 是最完美的方案。)

雖然 defer 很好,但不意味著析構就沒用武之地了。理想的情況是,析構、多態、defer 都要有……

這部分我的態度是中立。

錯誤處理

終于要點贊了。錯誤處理是在我看來 go 完勝的地方,恰到好處地處理問題,又防止濫用。也矯正 Java 帶來的歪風邪氣。

Java 的設計,讓人不得不用異常來處理業務。甚至 Java 自己還幫我們分好類了:一種是不是異常的異常,用來處理業務;另一種是真的異常。一些用慣 Java 的傻逼跑到 C++、PHP、Python 里亂拉屎,到處是 try catch。

Go 爸爸一聲令下,萬籟俱寂。

goroutine

最后不得不說說 gorouthine,畢竟是賣點嘛。我的態度中立偏贊。贊是因為這是一種太有創意的方案,居然想在在語言層面解決多線程、并發問題;不過我還是覺得這更多的是應用層面的問題,做到官方庫里會更好,而不是做成語法。

總結

剛開始用 Go 的時候,特別亮眼,簡直處處是亮點,然后越接觸越討厭,一點也不耐看……看得出來,設計者糅合了 C、python、Java 的一些特性,并融入了自己的獨特的理解。Go的設計者真的特別特立獨行且堅持己見,一些我喜歡的特性因為他們的堅持而存在下來,一些我討厭的特性也因為他們的堅(Gu)持(Zhi)而不能有所改觀。就這樣的 Go,想代替 C 作為系統語言,是沒戲的;想在網絡服務有一番作為,搶 Java 的份額,或許是有機會的,不過最多只能搶 Java 的,連 C# 的都搶不了,C++、PHP 更搶不了。

嗯,除了特定的不得不用的場合,反正我是不會特意用 Go 的。

2019,新年快樂!

posted on 2020-09-20 14:16 溪流 閱讀(4501) 評論(0)  編輯 收藏 引用 所屬分類: Golang

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久免费午夜影院| 开心色5月久久精品| 欧美日韩在线视频观看| 99精品国产在热久久婷婷| 欧美激情亚洲精品| 亚洲精品影视| 亚洲少妇自拍| 国产一区二区三区观看 | 欧美成人蜜桃| 99在线|亚洲一区二区| 夜夜精品视频| 国产亚洲网站| 亚洲国产精品t66y| 欧美精品在线观看一区二区| 在线亚洲一区二区| 午夜精品久久久久久久男人的天堂 | 久久久国产精品一区二区中文| 欧美有码视频| 亚洲欧洲视频| 亚洲视频欧美在线| 亚洲高清不卡在线| 99riav久久精品riav| 国产午夜精品美女毛片视频| 女人天堂亚洲aⅴ在线观看| 欧美国产日本| 久久久成人精品| 欧美精品 国产精品| 欧美一区二区三区视频在线观看 | 亚洲黄色成人| 国产伦精品一区二区三区四区免费| 麻豆久久久9性大片| 欧美精品成人| 久久亚洲图片| 国产精品久久一区主播| 免费看亚洲片| 国产欧美日韩另类视频免费观看| 欧美二区不卡| 国产一区二区三区电影在线观看| 亚洲精品乱码久久久久久蜜桃麻豆 | 精品1区2区| 亚洲一区二区在线播放| 日韩视频免费在线| 久久美女艺术照精彩视频福利播放| 亚洲香蕉视频| 欧美精品亚洲精品| 欧美二区在线播放| 国产亚洲精品久久久久久| 一本色道久久综合狠狠躁的推荐| 在线观看视频欧美| 性刺激综合网| 午夜视频在线观看一区二区三区| 欧美日韩精品免费在线观看视频| 免费亚洲电影在线观看| 国产亚洲视频在线| 亚洲在线免费视频| 午夜精品久久久久久久久久久久久 | 欧美福利网址| 亚洲成人直播| 久久深夜福利免费观看| 久久久久国产精品厨房| 国产免费一区二区三区香蕉精| 日韩一二三在线视频播| 夜夜爽av福利精品导航| 欧美激情麻豆| 亚洲精品永久免费精品| 亚洲另类自拍| 欧美精品91| 亚洲日韩欧美一区二区在线| 日韩天堂在线视频| 欧美日本精品| 一区二区三区久久| 亚洲制服欧美中文字幕中文字幕| 欧美午夜女人视频在线| 亚洲午夜一级| 久久精品免费看| 黄色成人在线| 欧美成人精品在线播放| 亚洲第一页自拍| 亚洲深夜福利网站| 国产精品色一区二区三区| 亚洲欧美成人网| 麻豆精品精华液| 91久久国产综合久久| 欧美激情第4页| 亚洲色诱最新| 久久久视频精品| 亚洲黄色天堂| 欧美特黄a级高清免费大片a级| 亚洲天堂久久| 久久夜色撩人精品| 亚洲日本中文| 国产精品在线看| 快射av在线播放一区| 亚洲精品在线观看视频| 欧美一区二区免费视频| 在线观看日韩av电影| 欧美日韩一级片在线观看| 香蕉精品999视频一区二区 | 亚洲性av在线| 尤物在线精品| 欧美日韩免费一区二区三区| 亚洲午夜精品在线| 免费一级欧美片在线观看| 在线一区视频| 黑人巨大精品欧美一区二区 | 欧美国产亚洲精品久久久8v| a4yy欧美一区二区三区| 久久久久一本一区二区青青蜜月| 亚洲精品一区中文| 国产主播一区二区| 欧美三区视频| 欧美成人免费视频| 欧美在线观看一二区| 亚洲欧洲精品一区二区三区不卡 | 一本色道久久综合| 国产一区二区三区自拍 | 久久先锋影音| 午夜精品久久久久久久久久久久| 亚洲欧洲精品一区二区三区 | 亚洲精品久久久久久久久久久| 欧美一级黄色录像| 一区二区日韩精品| 亚洲黄色尤物视频| 一区二区在线观看av| 国产精品一区二区黑丝| 欧美伦理a级免费电影| 久久噜噜亚洲综合| 午夜精品久久久久久久99水蜜桃| 亚洲精品一二区| 亚洲区第一页| 欧美激情一区二区三区四区| 久久影院午夜片一区| 久久精品一区二区三区中文字幕| 亚洲欧美日韩另类| 亚洲一区二区三区在线| 在线中文字幕一区| 亚洲美女av在线播放| 亚洲黑丝一区二区| 在线欧美影院| 亚洲第一黄色| 亚洲精品1区2区| 亚洲国产精品va在线看黑人 | 一区二区三区中文在线观看| 国产免费成人av| 国产亚洲亚洲| 尤妮丝一区二区裸体视频| 国内精品免费在线观看| 国产一区日韩二区欧美三区| 国产一区二区三区高清 | 欧美激情一区二区三区在线视频观看 | 蜜臀av一级做a爰片久久| 久久久精品欧美丰满| 久久精品免费| 久久综合一区二区| 欧美成人精品在线播放| 欧美福利一区| 亚洲美女电影在线| 一区二区高清在线| 午夜精品在线看| 久久久久久久高潮| 欧美不卡在线| 国产精品电影网站| 国产欧美日韩不卡| 在线观看精品| 一区二区三区四区五区视频| 亚洲欧美在线磁力| 久久视频免费观看| 欧美激情在线播放| 99精品免费视频| 性色一区二区三区| 美国十次成人| 国产精品草莓在线免费观看| 国产一区二区精品久久| 亚洲黑丝一区二区| 亚洲欧美日韩另类| 老司机午夜免费精品视频| 亚洲欧洲精品一区二区三区不卡| 一区二区欧美日韩| 久久久久久久综合日本| 欧美剧在线免费观看网站| 国产欧美日韩一区二区三区在线 | 国产亚洲电影| 在线亚洲+欧美+日本专区| 久久久亚洲精品一区二区三区| 亚洲国产精品久久久久秋霞不卡 | 中文av字幕一区| 久久久久久亚洲综合影院红桃| 欧美日韩在线播放三区四区| 国模精品一区二区三区色天香| 亚洲精品男同| 久久久99精品免费观看不卡| 亚洲区一区二区三区| 欧美在线观看视频在线| 欧美日韩一区精品| 亚洲第一综合天堂另类专| 午夜久久福利| 亚洲人人精品| 久久综合电影| 国产亚洲欧美日韩日本| 亚洲女人av|