go語言中那樣讓你吃驚的東西

本文面向golang的新手沦偎,第一次接觸golang時可能會吃驚的地方

1. 以大小寫開頭來決定一個聲明是包內(nèi)可見执庐,還是包外可見

如果一個常量/變量/類型/函數(shù) 它的名稱是小寫字母開頭映之,則它是一個內(nèi)部的,只能在同一個包內(nèi)訪問父款。
反之它是導出到外部的尾膊。

~/go/src/a.go

package a
import “b”

var name = b.lower // error
var name = b.Upper // correct

~/go/src/b.go

package b

const lower = “l(fā)ower”
const Upper = “Upper”

2. 函數(shù)支持多返回值。

 resp, err := http.Get(url)

對于那些將運行失敗看作是預期結(jié)果的函數(shù)络凿,它們會返回一個額外的返回值骡送,通常是最后一個,來傳遞錯誤信息絮记。如果導致失敗的原因只有一個摔踱,額外的返回值可以是一個布爾值,通常被命名為ok

導致失敗的原因不止一種怨愤,尤其是對I/O操作而言派敷,用戶需要了解更多的錯誤信息。因此撰洗,額外的返回值不再是簡單的布爾類型篮愉,而是error類型

io包保證任何由文件結(jié)束引起的讀取失敗都返回同一個錯誤——io.EOF,

3. 示例函數(shù)

go中Example開頭的函數(shù)都是示例函數(shù)差导,示例函數(shù)要被編譯以檢測程序是否有問題试躏,示例也會被go放到doc中

4. set

set是用map來實現(xiàn)的 map[string]bool
也可用bitmap來做
示例用bitmap實現(xiàn)整數(shù)集

具體實現(xiàn)

5. Package

本來go的模塊也比較神奇,所有新建的工程都要放到GOPATH/src下面设褐,不能隨便找個目錄就創(chuàng)建颠蕴,但后來發(fā)現(xiàn)1.11之后的go mod還比較正常,好用助析。

6. 測試

沒有斷言犀被,全是手動比較,然后用t.Error("xxx")自己寫測試和你期望不一樣的地方外冀,書上給的解譯是這樣的:

許多Go語言新人會驚異于Go語言極簡的測試框架寡键。很多其它語言的測試框架都提供了識別測試函數(shù)的機制(通常使用反射或元數(shù)據(jù)),通過設置一些“setup”和“teardown”的鉤子函數(shù)來執(zhí)行測試用例運行
的初始化和之后的清理操作锥惋,同時測試工具箱還提供了很多類似assert斷言昌腰、值比較函數(shù)、格式化輸出錯誤信息和停止一個失敗的測試等輔助函數(shù)(通常使用異常機制)膀跌。雖然這些機制可以使得測試非常
簡潔遭商,但是測試輸出的日志卻會像火星文一般難以理解。此外捅伤,雖然測試最終也會輸出PASS或FAIL的報告劫流,但是它們提供的信息格式卻非常不利于代碼維護者快速定位問題,因為失敗信息的具體含義非
常隱晦,比如“assert: 0 == 1”或成頁的海量跟蹤日志祠汇。

Go語言的測試風格則形成鮮明對比仍秤。它期望測試者自己完成大部分的工作,定義函數(shù)避免重復可很,就像普通編程那樣诗力。編寫測試并不是一個機械的填空過程;一個測試也有自己的接口我抠,盡管它的維護者也
是測試僅有的一個用戶苇本。一個好的測試不應該引發(fā)其他無關的錯誤信息,它只要清晰簡潔地描述問題的癥狀即可菜拓,有時候可能還需要一些上下文信息瓣窄。在理想情況下,維護者可以在不看代碼的情況下就能
根據(jù)錯誤信息定位錯誤產(chǎn)生的原因纳鼎。一個好的測試不應該在遇到一點小錯誤時就立刻退出測試俺夕,它應該嘗試報告更多的相關的錯誤信息,因為我們可能從多個失敗測試的模式中發(fā)現(xiàn)錯誤產(chǎn)生的規(guī)律贱鄙。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末劝贸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子贰逾,更是在濱河造成了極大的恐慌悬荣,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疙剑,死亡現(xiàn)場離奇詭異氯迂,居然都是意外死亡,警方通過查閱死者的電腦和手機言缤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門嚼蚀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人管挟,你說我怎么就攤上這事轿曙。” “怎么了僻孝?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵导帝,是天一觀的道長。 經(jīng)常有香客問我穿铆,道長您单,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任荞雏,我火速辦了婚禮虐秦,結(jié)果婚禮上平酿,老公的妹妹穿的比我還像新娘。我一直安慰自己悦陋,他們只是感情好蜈彼,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著俺驶,像睡著了一般幸逆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上痒钝,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天秉颗,我揣著相機與錄音,去河邊找鬼送矩。 笑死,一個胖子當著我的面吹牛哪替,可吹牛的內(nèi)容都是我干的栋荸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼凭舶,長吁一口氣:“原來是場噩夢啊……” “哼晌块!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起帅霜,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤匆背,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后身冀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钝尸,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年搂根,在試婚紗的時候發(fā)現(xiàn)自己被綠了珍促。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡剩愧,死狀恐怖猪叙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情仁卷,我是刑警寧澤穴翩,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站锦积,受9級特大地震影響芒帕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜充包,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一副签、第九天 我趴在偏房一處隱蔽的房頂上張望遥椿。 院中可真熱鬧,春花似錦淆储、人聲如沸冠场。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碴裙。三九已至,卻和暖如春点额,著一層夾襖步出監(jiān)牢的瞬間舔株,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工还棱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留载慈,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓珍手,卻偏偏與公主長得像办铡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子琳要,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容