1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 1975字,需瀏覽 4分鐘

         ·

        2021-04-27 02:41

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

        大家好,我是站長 polarisxu。

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

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

        • Go 箴言
        • Go 之禪
        • 代碼
        • 并發(fā)
        • 性能
        • 模塊
        • 構建
        • 測試
        • 工具
        • 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 使用語義明確的表示

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

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

        03 一些小技巧

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

        防止結構體字段用純值方式初始化,添加 _ struct {} 字段

        我們知道,結構體初始化時,可以用純值初始化。比如:

        type Point struct {
          X, Y float64
        }

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

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

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

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

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

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

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

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

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

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

        這個問題很多人可能會遇到。可以試試加上這個 tag:json:"id:string"

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

        04 總結

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

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




        往期推薦



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


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

        瀏覽 22
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            成人免费视频 在线观看 | 美女被操的视频在线观看 | 91日韩在线 | 男女h在线观看 | 少妇bbb撒尿做饭爱bbw | 伊人热热| 欧美天堂在线 | 亚洲高清无码视频 | 丰满少妇高潮久久久久久 | 黄动漫视频 |