日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
項(xiàng)目中要不要使用Go?我是這么思考的

我最近決定在一個(gè)新項(xiàng)目中使用 GoLang 來實(shí)現(xiàn)一組增刪改查的 API。在此之前,我較為熟悉 Java,Groovy,了解一些 Python。

成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括銀州網(wǎng)站建設(shè)、銀州網(wǎng)站制作、銀州網(wǎng)頁制作以及銀州網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,銀州網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到銀州省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

我大部分的經(jīng)驗(yàn)都是使用 Java 或者 Groovy 加上 Spring Boot。這讓我感到有些無聊,所以為什么不來學(xué)點(diǎn)兒東西找找樂子呢?

要求

以下是一些要求。

  • 設(shè)計(jì)并實(shí)現(xiàn)領(lǐng)域數(shù)據(jù)模型
  • 實(shí)現(xiàn)增刪改查 API
  • 在后端使用 Mongo 數(shù)據(jù)庫(kù)
  • 必須有 Swagger 文檔 API 定義并且能方便的用多種語言生成客戶端
  • 運(yùn)行在 Docker 容器中
  • 能被部署在 Kubernetes 中

非功能性要求

  • 需要能很容易的調(diào)用其它語言的 API
  • 需要能夠快速迭代(可能要突破常規(guī))
  • 必須有單元測(cè)試

加分項(xiàng)

  • 保守的內(nèi)存消耗
  • 這對(duì)于當(dāng)我想在一個(gè)內(nèi)存受限的環(huán)境中(如一個(gè) 512 MB 內(nèi)存的樹莓派)運(yùn)行程序時(shí),是很重要的。
  • 要有趣也要有學(xué)習(xí)體驗(yàn)

使用的模塊和庫(kù)

作用模塊訪問數(shù)據(jù)庫(kù)mongo-go-drive路由go-chiREST API JSON Patch( 譯者注:RFC6902[1] 和 RFC7396[2])json-patch單元測(cè)試testifySwagger API 定義go-swagger

優(yōu)點(diǎn)

Go 語言與 C 和 Java 十分的相像。有 C 和 Java 的基礎(chǔ)能很容易的熟練掌握 Go 語言,完成一個(gè)入門項(xiàng)目。

我特別喜歡 Go 代碼的簡(jiǎn)單明了。

公平來說,我也喜歡樣板代碼盡可能少的,備受好評(píng)的框架。我就十分喜歡 Java 11+ 或者 Groovy 與 Spring Boot,Spring Data,Lombok 項(xiàng)目,可能還有 Spring Data REST 的聯(lián)合使用。當(dāng)然,有時(shí)候 Spring Boot Data REST 的魔法有點(diǎn)兒過猶不及了。

Go 的 'defer' 關(guān)鍵字可以說是我最喜歡的特性之一了。推遲一些操作直到函數(shù)退出才執(zhí)行這一特性,在關(guān)閉資源并記錄函數(shù)退出動(dòng)作的日志方面十分有用。

不同點(diǎn)與不合適點(diǎn)

錯(cuò)誤處理有點(diǎn)兒繁瑣。

錯(cuò)誤處理對(duì)于 Java 背景的人來說有些不同。我發(fā)現(xiàn)在 Go 中它需要更明確。

在 Java 中,一個(gè)方法能拋出一個(gè)異常,也可以捕獲一個(gè)或多個(gè)異常,忽略它們(這樣做可能是錯(cuò)誤的),或者重新拋出給調(diào)用者來處理。Go 需要使用先調(diào)用方法,然后判斷是否有錯(cuò)誤發(fā)生這種模式。我們可以討論下這樣做好不好。

我發(fā)現(xiàn)對(duì)于 Go 的錯(cuò)誤檢測(cè)和傳遞需要一段時(shí)間來適應(yīng)而且覺得有點(diǎn)繁瑣,但這樣肯定是能行的。

 
 
 
  1. // 我經(jīng)常在代碼中看到這樣的模式
  2. obj1, err := doohickey.doSomething(someArg)
  3. if err !=nil {
  4.     log.Println("doohickey.doSomething got error error: ", err)
  5.     return
  6. }
  7. obj2, err2 := widget.doSomethingElse(otherArg)
  8. if err2 !=nil {
  9.     log.Println("Widget doSomethingElse returned error: ", err2)
  10.     return
  11. }
  12. //...

JSON 響應(yīng)類型以及映射到結(jié)構(gòu)體

對(duì)于 Go,JSON 和 靜態(tài)類型,我發(fā)現(xiàn) Go 在如何處理動(dòng)態(tài) JSON 和將其解析為結(jié)構(gòu)體方面有些笨拙和令人困惑。

這在 Groovy 和 Python 中相當(dāng)容易,他們完全可以動(dòng)態(tài)的把 JSON 轉(zhuǎn)換成其他東西的映射。

在 Go 中,將 JSON 反序列化為一個(gè)結(jié)構(gòu)并將其序列化回來,這與其他語言中的做法并沒有本質(zhì)上的不同。

成熟度進(jìn)展

實(shí)際上,我在這方面并沒有發(fā)現(xiàn)它有什么不好的。正相反,我發(fā)現(xiàn)了一些期待的地方。因?yàn)?Go 仍然是一門相對(duì)比較新的語言,在一些領(lǐng)域它正在迎頭趕上。

Go 依賴和版本化模塊庫(kù)

因?yàn)橐郧笆褂眠^依賴管理和構(gòu)建工具,如 Java 的 Gradle 和 Maven,自然而然的我就想 Go 有同種水平的依賴管理。

在我寫本文時(shí),GoLang 1.13[3] 支持谷歌的模塊代理,文檔上是這樣說的:

  • 從 Go 1.13 開始,go 命令在默認(rèn)情況下將使用由 Google 運(yùn)行的 Go 模塊鏡像、 Go 檢驗(yàn)和數(shù)據(jù)庫(kù)來進(jìn)行模塊的下載與認(rèn)證。參看 https://proxy.golang.org/privac[4] 來了解有關(guān)這些服務(wù)的隱私信息,參看 go 命令文檔[5] 了解怎么停止使用這些服務(wù)或者使用另外的服務(wù)的詳細(xì)配置。如果你依賴于一個(gè)不公開的模塊,參見 環(huán)境配置文檔[6]

結(jié)束語

令人驚訝的是,很容易地就可以掌握 GoLang 到實(shí)際生產(chǎn)的程度。我覺得它令人愉快而且很有趣。增強(qiáng) REST API,精煉數(shù)據(jù)模型,生成 Swagger 文檔和創(chuàng)建單元測(cè)試都是很流行并舒服的體驗(yàn)。

基于這次的經(jīng)歷,我越發(fā)的想學(xué)習(xí) GoLang 了。


網(wǎng)頁標(biāo)題:項(xiàng)目中要不要使用Go?我是這么思考的
當(dāng)前URL:http://m.5511xx.com/article/cosicgc.html