W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
我覺(jué)得很難用通常的描述方式來(lái)描述本文中的內(nèi)容。 所以本文將采用采訪的形式來(lái)進(jìn)行描述。
大概在2016年七月份左右,不是很密集地使用了Go兩年后,我覺(jué)得Go是一門簡(jiǎn)單的語(yǔ)言,我感覺(jué)我已經(jīng)精通了Go編程。 在那個(gè)時(shí)候,我在日常編程中已經(jīng)搜集了不少關(guān)于Go編程的細(xì)節(jié)。 我覺(jué)得我可以將這些細(xì)節(jié)寫成一本書。 我覺(jué)得這應(yīng)該是一件容易的事。
但是我發(fā)現(xiàn)我錯(cuò)了。我太過(guò)于自信了。 在試圖解釋一些細(xì)節(jié)時(shí),我發(fā)現(xiàn)我無(wú)法把它們解釋清楚。 我對(duì)Go編程中的很多細(xì)節(jié)的底層原因產(chǎn)生了困惑。 隨著越來(lái)越多的困惑的積攢,我覺(jué)得我對(duì)Go的領(lǐng)悟非常有限。 我感覺(jué)我仍然是一個(gè)Go新手程序員。
我放棄了寫那本書。
那本曾經(jīng)計(jì)劃要寫的書不是《Go語(yǔ)言101》。 放棄那本書的寫作計(jì)劃后,我通過(guò)閱讀很多官方Go文檔和網(wǎng)絡(luò)中的各種Go文章、關(guān)注Go官方項(xiàng)目的問(wèn)題跟蹤列表和一些Go論壇、查看一些代碼等途徑, 逐漸地,我?guī)缀跸宋宜嘘P(guān)于Go編程細(xì)節(jié)中的困惑。
我大概花了大約一年時(shí)間來(lái)消除這些困惑。 在這個(gè)時(shí)期,每當(dāng)我消除了某個(gè)主題的困惑,我就以該主題寫一篇博客文章。 最后,我寫了大約20篇Go文章。 與此同時(shí),我收集到了比以前更多的Go編程中的細(xì)節(jié)。 此時(shí)到了重啟編寫一本新的Go編程書籍的時(shí)候了。
我寫了另外大約十篇Go基礎(chǔ)教程和另外大約二十篇Go語(yǔ)言中關(guān)于各種其它主題的文章。 所以現(xiàn)在《Go語(yǔ)言101》大約有50篇文章。
一些困惑是關(guān)于一些Go語(yǔ)法和語(yǔ)義設(shè)計(jì)細(xì)節(jié)的。 一些困惑涉及到某些類型的值,主要是切片,接口和通道類型。 另外一些涉及到標(biāo)準(zhǔn)包API的使用細(xì)節(jié)。
我覺(jué)得最主要的原因是我當(dāng)時(shí)抱著Go是一門非常簡(jiǎn)單的語(yǔ)言的態(tài)度去學(xué)習(xí)和使用Go。 持有這種態(tài)度阻止了我更深刻地理解Go。
Go是一門特性豐富的語(yǔ)言。它的語(yǔ)法集雖然不大,但我們也不能說(shuō)它很小。 Go中的一些語(yǔ)法和語(yǔ)義設(shè)計(jì)很簡(jiǎn)單明了,但也有一些設(shè)計(jì)略微反直覺(jué),甚至自相矛盾。 Go語(yǔ)法和語(yǔ)義設(shè)計(jì)中有很多折衷和權(quán)衡。一個(gè)Go程序員需要相當(dāng)?shù)腉o編程經(jīng)驗(yàn)和感悟才能理解這些權(quán)衡。
Go提供了幾種基本但非必需的類型,比如切片,接口和通道。 Go編譯器和運(yùn)行時(shí)在實(shí)現(xiàn)這些類型的時(shí)候,進(jìn)行了必要的封裝。 一方面,這些封裝為Go編程帶來(lái)了許多便利,使我們不用從頭實(shí)現(xiàn)這些類型。 但另一方面,這些封裝隱藏了這些類型的內(nèi)部結(jié)構(gòu), 從而對(duì)我們更深入地理解這些類型的值的行為帶來(lái)了一些障礙。
許多官方和非官方的Go教程都非常簡(jiǎn)單。 這些教程只涵蓋了一般典型用例,而忽略了許多細(xì)節(jié)。 這對(duì)鼓勵(lì)新手Go程序員學(xué)習(xí)和使用Go非常有好處, 但另一方面,這也使許多Go程序員對(duì)他們的Go知識(shí)掌握程度過(guò)度自信。 從長(zhǎng)遠(yuǎn)看,這不利于一個(gè)Go程序員更好地理解和使用Go。
標(biāo)準(zhǔn)庫(kù)包中聲明的某些函數(shù)和類型沒(méi)有得到詳細(xì)的解釋。很多時(shí)候這是可以理解的。 因?yàn)楹芏嗉?xì)節(jié)解釋起來(lái)很拗口和微妙,有時(shí)很難找到適當(dāng)?shù)拇朐~來(lái)清楚地解釋它們。 少量但準(zhǔn)確的描述比大量但不準(zhǔn)確的描述要好。但這確實(shí)也給Go程序員們留下了一些困惑。
我認(rèn)為,至少簡(jiǎn)單不是Go的主要賣點(diǎn)。畢竟有一些其它語(yǔ)言確實(shí)比Go簡(jiǎn)單。 另一方面,雖然Go是一門特性豐富的語(yǔ)言,但是它卻也不是一門復(fù)雜的語(yǔ)言。 一個(gè)持有積極的學(xué)習(xí)態(tài)度的Go新手程序員可以在一年內(nèi)精通Go編程。
我個(gè)人的觀點(diǎn)是,做為一門靜態(tài)語(yǔ)言,Go卻和很多動(dòng)態(tài)腳本語(yǔ)言一樣得靈活是Go的主要賣點(diǎn)。
節(jié)省內(nèi)存、程序啟動(dòng)快、代碼執(zhí)行速度快和編譯速度快合在一塊兒是Go的另一個(gè)主要賣點(diǎn)。 雖然這三項(xiàng)是C家族語(yǔ)言的共同特征,但是在Web開發(fā)領(lǐng)域,很少有語(yǔ)言同時(shí)擁有這四個(gè)特征。 事實(shí)上,這就是我當(dāng)初從Java轉(zhuǎn)到Go進(jìn)行Web開發(fā)的原因。
內(nèi)置并發(fā)編程支持也算是Go的賣點(diǎn),雖然我個(gè)人認(rèn)為它不是Go的主要賣點(diǎn)。
良好的代碼可讀性是Go的另一個(gè)重要賣點(diǎn)。 我感覺(jué)可讀性是Go在設(shè)計(jì)的時(shí)候考慮的最重要的一個(gè)因素。
良好的跨平臺(tái)支持也應(yīng)該算是Go的一個(gè)賣點(diǎn),盡管如今這個(gè)賣點(diǎn)并不是很新鮮。
一個(gè)穩(wěn)定的Go核心設(shè)計(jì)和開發(fā)團(tuán)隊(duì)以及一個(gè)活躍的社區(qū)也可以被視為Go的一個(gè)賣點(diǎn)。
《Go語(yǔ)言101》做了以下這些方面來(lái)試圖清除很多Go編程中可能遇到的困惑。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: