成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

項目中要不要使用 Go?我是這么思考的

開發 前端
我最近決定在一個新項目中使用 GoLang 來實現一組增刪改查的 API。在此之前,我較為熟悉 Java,Groovy,了解一些 Python。我大部分的經驗都是使用 Java 或者 Groovy 加上 Spring Boot。這讓我感到有些無聊,所以為什么不來學點兒東西找找樂子呢?

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

我大部分的經驗都是使用 Java 或者 Groovy 加上 Spring Boot。這讓我感到有些無聊,所以為什么不來學點兒東西找找樂子呢?

[[324480]]

要求

以下是一些要求。

  • 設計并實現領域數據模型
  • 實現增刪改查 API
  • 在后端使用 Mongo 數據庫
  • 必須有 Swagger 文檔 API 定義并且能方便的用多種語言生成客戶端
  • 運行在 Docker 容器中
  • 能被部署在 Kubernetes 中

非功能性要求

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

加分項

  • 保守的內存消耗
  • 這對于當我想在一個內存受限的環境中(如一個 512 MB 內存的樹莓派)運行程序時,是很重要的。
  • 要有趣也要有學習體驗

使用的模塊和庫

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

優點

Go 語言與 C 和 Java 十分的相像。有 C 和 Java 的基礎能很容易的熟練掌握 Go 語言,完成一個入門項目。

我特別喜歡 Go 代碼的簡單明了。

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

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

不同點與不合適點

錯誤處理有點兒繁瑣。

錯誤處理對于 Java 背景的人來說有些不同。我發現在 Go 中它需要更明確。

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

我發現對于 Go 的錯誤檢測和傳遞需要一段時間來適應而且覺得有點繁瑣,但這樣肯定是能行的。

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

JSON 響應類型以及映射到結構體

對于 Go,JSON 和 靜態類型,我發現 Go 在如何處理動態 JSON 和將其解析為結構體方面有些笨拙和令人困惑。

這在 Groovy 和 Python 中相當容易,他們完全可以動態的把 JSON 轉換成其他東西的映射。

在 Go 中,將 JSON 反序列化為一個結構并將其序列化回來,這與其他語言中的做法并沒有本質上的不同。

成熟度進展

實際上,我在這方面并沒有發現它有什么不好的。正相反,我發現了一些期待的地方。因為 Go 仍然是一門相對比較新的語言,在一些領域它正在迎頭趕上。

Go 依賴和版本化模塊庫

因為以前使用過依賴管理和構建工具,如 Java 的 Gradle 和 Maven,自然而然的我就想 Go 有同種水平的依賴管理。

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

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

結束語

令人驚訝的是,很容易地就可以掌握 GoLang 到實際生產的程度。我覺得它令人愉快而且很有趣。增強 REST API,精煉數據模型,生成 Swagger 文檔和創建單元測試都是很流行并舒服的體驗。

基于這次的經歷,我越發的想學習 GoLang 了。

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2012-03-16 14:23:00

框架

2023-10-06 12:04:41

ORM關系型數據庫

2012-03-16 14:23:00

框架

2013-11-29 14:04:42

2021-02-21 09:09:24

GoGOPATH代碼

2019-09-27 15:40:04

云計算數據庫DBaaS

2019-10-09 08:53:47

數據庫即服務DBaaS云計算

2021-10-21 09:41:43

互聯網數據技術

2017-11-20 09:30:14

運維PythonGO

2017-11-20 09:00:43

跳槽職場精英年終獎

2025-05-28 09:05:00

監控架構開發

2020-05-26 07:40:33

微服務聚合工程Project

2020-11-17 09:17:58

框架組件基礎服務

2018-07-12 09:04:15

RAID陣列硬盤

2014-12-09 09:13:46

BaaS云備份備份即服務

2018-01-24 07:58:47

框架組件技術棧開源

2018-01-29 09:42:27

創業技術團隊

2015-11-30 11:52:03

云服務最佳實踐

2018-12-06 14:40:07

蘋果iOS 12.1.1 iOS 12
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av网站免费在线观看 | 黄色大片免费观看 | 日日干天天操 | 日韩国产一区 | av国产在线观看 | 国产精品亚洲精品 | 国产a区| 国产资源在线播放 | 国产精品色 | 久草新在线| 国产精品视频免费播放 | 成人在线一区二区 | 你懂的国产 | 二区欧美 | 罗宾被扒开腿做同人网站 | 黄色视频a级毛片 | 日本电影免费完整观看 | 精品国产乱码一区二区三区a | 亚洲视频一区在线播放 | 日韩欧美一区二区三区四区 | 成人精品视频在线观看 | 草比网站 | www.日本在线 | 欧美在线一区视频 | 一级毛片免费 | 逼逼网 | 国产欧美日韩在线 | 天天干天天插天天 | 国产精品精品3d动漫 | 91色站 | 国产美女视频黄a视频免费 国产精品福利视频 | 欧美精品区 | 午夜天堂精品久久久久 | 国产精品久久精品 | 91精品国产综合久久久久久丝袜 | 国产一区二区在线免费观看 | 亚洲激情在线观看 | 99精品电影 | 日本黄色免费视频 | 久久狠狠 | 中文字幕第一页在线 |