<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Go 語言一些最佳實踐:建議收藏

          共 1975字,需瀏覽 4分鐘

           ·

          2021-04-27 02:41

          閱讀本文大概需要 4 分鐘。

          大家好,我是站長 polarisxu。

          看到一個 GitHub 項目,專門總結(jié) Go 語言的一些建議或最佳實踐。這些建議不一定全部適合你,但很多時候是值得借鑒或參考的。

          這份 go-advice 包括以下幾個部分:

          • Go 箴言
          • Go 之禪
          • 代碼
          • 并發(fā)
          • 性能
          • 模塊
          • 構(gòu)建
          • 測試
          • 工具
          • Misc

          其中,第一部分和第二部分,分別來自 Rob Pike 和 Dave Cheney。

          項目地址:https://github.com/cristaloleg/go-advice,還有中文版:https://github.com/cristaloleg/go-advice/blob/master/README_ZH.md。(文章底部「閱讀原文」可直達)

          我們看幾個「代碼」部分的實踐或建議。

          01 格式化

          這個相信很多人已經(jīng)養(yǎng)成習慣了,而且一般 IDE 會自動做這件事。go fmt:這是 Go 愛好者喜歡的功能之一。團隊中,可以為 git 創(chuàng)建鉤子或在 CI/CD 系統(tǒng)中自動執(zhí)行 go fmt,當然最好是每個人養(yǎng)成這樣的習慣,比如強制要求編輯器配置上自動 go fmt。

          02 使用語義明確的表示

          很多時候,不同的代碼能表示相同的意思。但代碼應(yīng)該是寫給人閱讀的,只是偶爾被機器執(zhí)行一下。因此,閱讀性應(yīng)該提到一個更高的要求。這個項目對此作了一些建議,讓你在寫出的代碼更可讀。

          • 用 chan struct{} 來傳遞信號,chan bool 表達的不夠清楚
          • 30 * time.Second 比 time.Duration(30) * time.Second 更好
          • 用 time.Duration 代替 int64 + 變量名
          • 不要依賴于計算順序,特別是在 return 語句中
          • 。。。

          03 一些小技巧

          有時候,為了代碼更可讀或為了一致性,亦或是避免一些潛在的問題發(fā)生,我們會在團隊做相關(guān)的代碼風格規(guī)定。除了規(guī)定,如果你寫的代碼,希望使用者能夠更規(guī)范的用,有些地方可以使用一些技巧。

          防止結(jié)構(gòu)體字段用純值方式初始化,添加 _ struct {} 字段

          我們知道,結(jié)構(gòu)體初始化時,可以用純值初始化。比如:

          type Point struct {
            X, Y float64
          }

          可以如下兩種方式初始化:

          Point {X:1,Y:1}
          Point {11}

          很顯然,第一種方式可讀性更好。如果你希望限制只能第一種方式,可以這么做:

          type Point struct {
           _    struct{}
           X, Y float64
          }

          go-advice 項目中把 _ struct{} 放在了結(jié)構(gòu)體最后,這會讓結(jié)構(gòu)體的空間增加,而放在開始卻不會增加。即

          type Point struct {
           _    struct{}
           X, Y float64
          }

          type Point struct {
           X, Y float64
           _    struct{}
          }

          的空間占用是不一樣的,你知道為什么嗎?

          所以,對每個建議,我們應(yīng)該認真審視,而不是人為這上面說的就一定對。

          JavaScript 解析整數(shù)為浮點數(shù)并且你的 int64 可能溢出

          這個問題很多人可能會遇到??梢栽囋嚰由线@個 tag:json:"id:string"

          type Request struct {
            ID int64 `json:"id,string"`
          }

          04 總結(jié)

          這個項目提到的很多建議或?qū)嵺`,認真閱讀,同時審視下自己是怎么做的,它的建議是否合理?!好的地方,不防借鑒下。

          建議可以多逛逛 GitHub,發(fā)現(xiàn)好項目~




          往期推薦



          我是 polarisxu,北大碩士畢業(yè),曾在 360 等知名互聯(lián)網(wǎng)公司工作,10多年技術(shù)研發(fā)與架構(gòu)經(jīng)驗!2012 年接觸 Go 語言并創(chuàng)建了 Go 語言中文網(wǎng)!


          堅持輸出技術(shù)(包括 Go、Rust 等技術(shù))、職場心得和創(chuàng)業(yè)感悟!歡迎關(guān)注「polarisxu」一起成長!

          瀏覽 22
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码毛片一区二区三区视频免费看 | 色吧AV| 青春草在线 | 国产成人无码AⅤ片免费播放 | 九九香蕉视频 |