自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

我們?yōu)槭裁催x擇了 Go 語(yǔ)言

開(kāi)發(fā) 開(kāi)發(fā)工具
我發(fā)現(xiàn)我花了四年時(shí)間錘煉自己用 C 語(yǔ)言構(gòu)建系統(tǒng)的能力,試圖找到一個(gè)規(guī)范,可以更好的編寫(xiě)軟件。結(jié)果發(fā)現(xiàn)只是對(duì) Go 的模仿。缺乏語(yǔ)言層面的支持,只能是一個(gè)拙劣的模仿。

我發(fā)現(xiàn)我花了四年時(shí)間錘煉自己用 C 語(yǔ)言構(gòu)建系統(tǒng)的能力,試圖找到一個(gè)規(guī)范,可以更好的編寫(xiě)軟件。結(jié)果發(fā)現(xiàn)只是對(duì) Go 的模仿。缺乏語(yǔ)言層面的支持,只能是一個(gè)拙劣的模仿。

這是云風(fēng)在博客中說(shuō)過(guò)的一句話。最近開(kāi)始做一個(gè)很有意思的個(gè)人項(xiàng)目,我們選擇使用 Go 來(lái)搭建后臺(tái)服務(wù),Why Go ?其實(shí)真相是:不是我們選擇了 Go ,是 Go 面向我們,選擇了我們。

出身

首先 ,不得不說(shuō)一下 Go 的作者(僅選了三個(gè)代表):

  • Ken Thompson
  • Rob Pike
  • Robert Griesemer

Ken Thompson 大家肯定不陌生,設(shè)計(jì)了 B 語(yǔ)言和 C 語(yǔ)言,Unix 之父,1983年圖領(lǐng)獎(jiǎng)得主,Ken 老爺子在2000年的時(shí)候離開(kāi)了貝爾實(shí)驗(yàn)室,轉(zhuǎn)行飛行員!!!后來(lái)加入了 Google,順手寫(xiě)了個(gè) Go 。 這里 有 Ken 和他的好基友 Denise M. Ritchie的故事。

[[172432]]

上面應(yīng)該有一張 Ken 和 Denise 的合照,如果顯示不出來(lái),你可能被墻了,自救吧

Rob Pike 參與 Plan9 和 Inferno 操作系統(tǒng)開(kāi)發(fā),Unix 小組成員。

Robert,曾協(xié)助制作Java的HotSpot編譯器和Chrome瀏覽器的JavaScript引擎V8。

按照這個(gè)配置,Go 出身于 Google,師出名門(mén)加上牛逼哄哄的作者們,語(yǔ)言界的富二代。

語(yǔ)言的設(shè)計(jì)者,很大程度決定了語(yǔ)言的設(shè)計(jì)哲學(xué)。在學(xué)習(xí) Go 的過(guò)程中,你會(huì)感覺(jué)到這門(mén)語(yǔ)言如此的簡(jiǎn)潔優(yōu)雅,但是又不簡(jiǎn)單。

設(shè)計(jì)哲學(xué)和特性

來(lái)說(shuō)一下語(yǔ)言的設(shè)計(jì)哲學(xué)和特性(并不想拆開(kāi)講解)。

少即是多。跟 C++ 不同的是, Go 沒(méi)有盡可能多的包含所有的特性,這只會(huì)增加了語(yǔ)言自身的復(fù)雜性,提高了學(xué)習(xí)成本。Go 盡可能保持簡(jiǎn)單,甚至摒棄了繼承這一特性。使用過(guò) Java 的程序員對(duì)此可能略感不適,畢竟在面向?qū)ο蟮木幊棠P椭?,繼承是非常常用的策略。而 Go 選擇使用簡(jiǎn)單的組合的方式來(lái)構(gòu)建復(fù)雜的類(lèi)型,因?yàn)槔^承會(huì)提高軟件開(kāi)發(fā)的復(fù)雜程度,以 Java 的集合類(lèi)為例,多少學(xué)習(xí) Java 的人至今仍然道不出集合類(lèi)之間的繼承關(guān)系。多用組合,少用繼承,Go 放棄了看似強(qiáng)大的語(yǔ)言特性,把這一理念實(shí)踐的非常徹底。

編碼規(guī)范。有些人覺(jué)得代碼規(guī)范被設(shè)計(jì)到語(yǔ)言本身會(huì)很奇怪,限制了語(yǔ)言。但實(shí)際上,Go 直接在語(yǔ)言層面加以約束,意義重大。曾幾何時(shí),團(tuán)隊(duì)會(huì)因?yàn)檎Z(yǔ)言的 code style 而爭(zhēng)論不休,code format 需要團(tuán)隊(duì)通過(guò)政策來(lái)約束,code review 可能也會(huì)因?yàn)榇a格式的問(wèn)題而爭(zhēng)吵的面紅耳赤。Go 作為互聯(lián)網(wǎng)時(shí)代的一門(mén)語(yǔ)言,可以讓全世界的 Go programmer 的代碼風(fēng)格保持一致,減少了無(wú)意義的爭(zhēng)論,對(duì)于共享和合作意義重大。

設(shè)計(jì)規(guī)則靈活。Go 是一門(mén)多范式的編程語(yǔ)言。Go 開(kāi)發(fā)者可以自由發(fā)揮。

面向接口編程。這也是大型軟件系統(tǒng)的一種設(shè)計(jì)哲學(xué),面向抽象,而非面向?qū)崿F(xiàn)。Go 的接口是duck類(lèi)型,鴨子類(lèi)型在 ruby 中非常常見(jiàn)。它講述的是如果一只鳥(niǎo)走起路來(lái)像鴨子,游泳也像鴨子,叫起來(lái)也像鴨子,那么這只鳥(niǎo)就是鴨子。因此 Go 的接口定義是隱式的,非侵入性的。它關(guān)注的不是對(duì)象(當(dāng)然在 Go 中我們稱(chēng)之為 struct )的類(lèi)型本身,而是如何使用。

異常處理和防御性編程。非常明顯的一點(diǎn)是 Go 的函數(shù)調(diào)用對(duì) error 的檢查,雖然讓代碼可能并不美觀,但是為了實(shí)用性,這種級(jí)別的代碼防御也是可以接受的,減少不安全的代碼。

實(shí)踐理念。Go 自身提供了豐富的 CLI,幾乎涵蓋了整個(gè)軟件的生命周期,例如開(kāi)發(fā),測(cè)試,部署,維護(hù)等環(huán)節(jié)。寫(xiě) Go 的時(shí)候,不再需要額外的IDE或者是工具在組織代碼,構(gòu)建,編譯,測(cè)試。這省去了很多麻煩,節(jié)省了開(kāi)發(fā)者寶貴的時(shí)間。我們只需要關(guān)注代碼本身即可。

以上主要是關(guān)于 Go 的設(shè)計(jì)哲學(xué),其中摻雜的提到了一些特性。其實(shí) Go 還有很多特性值得我們?nèi)ニ伎?Go 為何這樣設(shè)計(jì),比如:與 C 語(yǔ)言的集成 CGo 這種語(yǔ)言間的交互性;匿名函數(shù)和閉包;函數(shù)多返回值;豐富的類(lèi)型系統(tǒng);自動(dòng)的 gc( gc 的鼻祖應(yīng)該是 lisp, 被 Java 發(fā)揮的爐火純青,v8 因有優(yōu)秀的 gc 性能得以大幅度提升,雖然這不是 Go 的專(zhuān)利,但是這卻讓開(kāi)發(fā)者省了不少心);包管理;單元測(cè)試規(guī)范;并發(fā)和分布式;開(kāi)發(fā)和執(zhí)行效率;同樣的支持跨平臺(tái);對(duì)網(wǎng)絡(luò)開(kāi)發(fā)有非常好的支持,不需要使用框架也可以很快的開(kāi)發(fā)一個(gè) web 程序。這些特性很多都不是 Go 的專(zhuān)利,但是 Go 卻有限的進(jìn)行了吸收和發(fā)揮。

總之,Go 被稱(chēng)為21世紀(jì)的 C 語(yǔ)言名副其實(shí),正因如此,在我們的新項(xiàng)目中,不管是從語(yǔ)言本身,團(tuán)隊(duì)協(xié)作,部署成本,性能等各個(gè)方面考慮,Go 是我們的不二選擇,當(dāng)然,Go 開(kāi)發(fā)者現(xiàn)在并不是很多(比如相對(duì)于爛大街的 Java),但是我有理由相信,越來(lái)越多的人也會(huì)像我一樣,被 Go 所吸引,并且也選擇 Go 。

責(zé)任編輯:未麗燕 來(lái)源: 推酷
相關(guān)推薦

2020-06-10 09:06:48

MongoDB架構(gòu)高可用

2021-04-09 09:55:55

DockerGoLinux

2023-02-10 08:58:46

2024-01-15 00:42:55

Go語(yǔ)言應(yīng)用程序

2020-04-07 16:12:56

Go編程語(yǔ)言開(kāi)發(fā)

2012-08-13 09:15:54

Go開(kāi)發(fā)語(yǔ)言編程語(yǔ)言

2017-02-27 15:19:04

2010-11-03 09:22:00

C語(yǔ)言

2021-04-26 09:33:46

Go Iota語(yǔ)言

2024-01-02 10:38:22

Go語(yǔ)言數(shù)組

2018-05-02 12:34:48

2018-05-30 14:49:51

編程語(yǔ)言API語(yǔ)法

2018-09-28 10:06:21

移動(dòng)開(kāi)發(fā)App

2021-12-06 12:48:40

Gosyncatomic

2023-03-06 08:01:25

structGo語(yǔ)言

2012-05-19 22:17:30

Android

2022-01-17 16:09:43

Go語(yǔ)言開(kāi)發(fā)

2022-01-26 00:00:00

GoGopher語(yǔ)言

2017-02-27 15:43:14

iOSObject-CJava

2018-12-21 11:26:49

MySQLMongoDB數(shù)據(jù)庫(kù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)