最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文了解Go語言中編碼規(guī)范的使用

 更新時間:2020年05月25日 08:36:35   作者:Python編程時光  
這篇文章主要介紹了一文了解Go語言中編碼規(guī)范的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

每個語言都有自己特色的編碼規(guī)范,學習該語言的命名規(guī)范,能讓你寫出來的代碼更加易讀,更加不容易出現(xiàn)一些低級錯誤。

本文根據(jù)個人編碼習慣以及網(wǎng)絡上的一些文章,整理了一些大家能用上的編碼規(guī)范,可能是一些主流方案,但不代表官方,這一點先聲明一下。

1. 文件命名

由于 Windows平臺文件名不區(qū)分大小寫,所以文件名應一律使用小寫

不同單詞之間用下劃線分詞,不要使用駝峰式命名

如果是測試文件,可以以 _test.go 結尾

文件若具有平臺特性,應以 文件名_平臺.go 命名,比如 utils_ windows.go,utils_linux.go,可用的平臺有:windows, unix, posix, plan9, darwin, bsd, linux, freebsd, nacl, netbsd, openbsd, solaris, dragonfly, bsd, notbsd, android,stubs

一般情況下應用的主入口應為 main.go,或者以應用的全小寫形式命名。比如MyBlog 的入口可以為 myblog.go

2. 常量命名

目前在網(wǎng)絡上可以看到主要有兩種風格的寫法

第一種是駝峰命名法,比如 appVersion

第二種使用全大寫且用下劃線分詞,比如 APP_VERSION

這兩種風格,沒有孰好孰弱,可自由選取,我個人更傾向于使用第二種,主要是能一眼與變量區(qū)分開來。

如果要定義多個變量,請使用 括號 來組織。

const (
  APP_VERSION = "0.1.0"
 CONF_PATH = "/etc/xx.conf"
)

3. 變量命名

和常量不同,變量的命名,開發(fā)者們的喜好就比較一致了,統(tǒng)一使用 駝峰命名法

  1. 在相對簡單的環(huán)境(對象數(shù)量少、針對性強)中,可以將完整單詞簡寫為單個字母,例如:user寫為u
  2. 若該變量為 bool 類型,則名稱應以 Has, Is, Can 或 Allow 開頭。例如:isExist ,hasConflict 。
  3. 其他一般情況下首單詞全小寫,其后各單詞首字母大寫。例如:numShips 和 startDate 。
  4. 若變量中有特有名詞(以下列出),且變量為私有,則首單詞還是使用全小寫,如 apiClient。
  5. 若變量中有特有名詞(以下列出),但變量不是私有,那首單詞就要變成全大寫。例如:APIClient,URLString

這里列舉了一些常見的特有名詞:

// A GonicMapper that contains a list of common initialisms taken from golang/lint
var LintGonicMapper = GonicMapper{
  "API":  true,
  "ASCII": true,
  "CPU":  true,
  "CSS":  true,
  "DNS":  true,
  "EOF":  true,
  "GUID": true,
  "HTML": true,
  "HTTP": true,
  "HTTPS": true,
  "ID":  true,
  "IP":  true,
  "JSON": true,
  "LHS":  true,
  "QPS":  true,
  "RAM":  true,
  "RHS":  true,
  "RPC":  true,
  "SLA":  true,
  "SMTP": true,
  "SSH":  true,
  "TLS":  true,
  "TTL":  true,
  "UI":  true,
  "UID":  true,
  "UUID": true,
  "URI":  true,
  "URL":  true,
  "UTF8": true,
  "VM":  true,
  "XML":  true,
  "XSRF": true,
  "XSS":  true,
}

4. 函數(shù)命名

  1. 函數(shù)名還是使用 駝峰命名法
  2. 但是有一點需要注意,在 Golang 中是用大小寫來控制函數(shù)的可見性,因此當你需要在包外訪問,請使用 大寫字母開頭
  3. 當你不需要在包外訪問,請使用小寫字母開頭

另外,函數(shù)內部的參數(shù)的排列順序也有幾點原則

  1. 參數(shù)的重要程度越高,應排在越前面
  2. 簡單的類型應優(yōu)先復雜類型
  3. 盡可能將同種類型的參數(shù)放在相鄰位置,則只需寫一次類型

5. 接口命名

使用駝峰命名法,可以用 type alias 來定義大寫開頭的 type 給包外訪問。

type helloWorld interface {
  func Hello();
}

type SayHello helloWorld

當你的接口只有一個函數(shù)時,接口名通常會以 er 為后綴

type Reader interface {
  Read(p []byte) (n int, err error)
}

5. 注釋規(guī)范

注釋分為

5.1 包注釋

位于 package 之前,如果一個包有多個文件,只需要在一個文件中編寫即可
如果你想在每個文件中的頭部加上注釋,需要在版權注釋和 Package前面加一個空行,否則版權注釋會作為Package的注釋。

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package net

如果是特別復雜的包,可單獨創(chuàng)建 doc.go 文件說明

5.2 代碼注釋

用于解釋代碼邏輯,可以有兩種寫法

單行注釋使用 // ,多行注釋使用 /* comment */

// 單行注釋

/*
多
行
注
釋
*/

另外,對于代碼注釋還有一些更加苛刻的要求,這個看個人了,摘自網(wǎng)絡:

所有導出對象都需要注釋說明其用途;非導出對象根據(jù)情況進行注釋。
如果對象可數(shù)且無明確指定數(shù)量的情況下,一律使用單數(shù)形式和一般進行時描述;否則使用復數(shù)形式。
包、函數(shù)、方法和類型的注釋說明都是一個完整的句子。
句子類型的注釋首字母均需大寫;短語類型的注釋首字母需小寫。
注釋的單行長度不能超過 80 個字符。
類型的定義一般都以單數(shù)形式描述:

// Request represents a request to run a command. type Request struct { ...

如果為接口,則一般以以下形式描述:

 // FileInfo is the interface that describes a file and is returned by Stat and Lstat.
 type FileInfo interface { ...

函數(shù)與方法的注釋需以函數(shù)或方法的名稱作為開頭:

// Post returns *BeegoHttpRequest with POST method.

如果一句話不足以說明全部問題,則可換行繼續(xù)進行更加細致的描述:

 // Copy copies file from source to target path.
 // It returns false and error when error occurs in underlying function calls.

若函數(shù)或方法為判斷類型(返回值主要為 bool 類型),則以 <name> returns true if 開頭:

 // HasPrefix returns true if name has any string in given slice as prefix.
 func HasPrefix(name string, prefixes []string) bool { ...

5.3 特別注釋

  • TODO:提醒維護人員此部分代碼待完成
  • FIXME:提醒維護人員此處有BUG待修復
  • NOTE:維護人員要關注的一些問題說明

6. 包的導入

單行的包導入

import "fmt"

多個包導入,請使用 {} 來組織

import {
 "fmt"
 "os"
}

另外根據(jù)包的來源,對排版還有一定的要求

標準庫排最前面,第三方包次之、項目內的其它包和當前包的子包排最后,每種分類以一空行分隔。
盡量不要使用相對路徑來導入包。

import (
  "fmt"
  "html/template"
  "net/http"
  "os"
 
  "github.com/codegangsta/cli"
  "gopkg.in/macaron.v1"
 
  "github.com/gogits/git"
  "github.com/gogits/gfm"
 
  "github.com/gogits/gogs/routers"
  "github.com/gogits/gogs/routers/repo"
  "github.com/gogits/gogs/routers/user"
)

7. 善用 gofmt

除了命名規(guī)范外,Go 還有很多格式上的規(guī)范,比如

  1. 使用 tab 進行縮進
  2. 一行最長不要超過 80 個字符

因此在格式上的問題,你大部分都可以放心交由 gofmt 幫你調整。關于 gofmt 的文章還在寫,應該這兩天就會更新。你可以過兩天再來看看。

參考文章:

Go語言(Golang)編碼規(guī)范

到此這篇關于一文了解Go語言中編碼規(guī)范的使用的文章就介紹到這了,更多相關Go語言編碼規(guī)范內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • go語言學習之包和變量詳解

    go語言學習之包和變量詳解

    這篇文章主要給大家愛介紹了關于go語言學習之包和變量的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用go語言具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-06-06
  • Golang中間件設計示例詳解

    Golang中間件設計示例詳解

    這篇文章主要介紹了Golang中間件設計示例,中間件是在HTTP請求處理過程中,對請求進行處理的一種模式,中間件可以在請求到達處理器之前或之后對請求進行攔截,修改或者增強,同時可以對響應進行處理,需要的朋友可以參考下
    2023-05-05
  • 淺談go 協(xié)程的使用陷阱

    淺談go 協(xié)程的使用陷阱

    這篇文章主要介紹了淺談go 協(xié)程的使用陷阱,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • golang調用shell命令(實時輸出,終止)

    golang調用shell命令(實時輸出,終止)

    本文主要介紹了golang調用shell命令(實時輸出,終止),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • GoFrame?ORM原生方法操作示例

    GoFrame?ORM原生方法操作示例

    這篇文章主要為大家介紹了GoFrame?ORM原生方法操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Golang語言學習拿捏Go反射示例教程

    Golang語言學習拿捏Go反射示例教程

    這篇文章主要為大家介紹了Golang語言中Go反射示例的教程,教你拿捏Go反射,再也不用被Go反射折磨,有需要的朋友可以共同學習參考下
    2021-11-11
  • golang 微服務之gRPC與Protobuf的使用

    golang 微服務之gRPC與Protobuf的使用

    這篇文章主要介紹了golang 微服務之gRPC與Protobuf的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • Golang打包go項目部署到linux服務器正確方法

    Golang打包go項目部署到linux服務器正確方法

    這篇文章主要給大家介紹了關于Golang打包go項目部署到linux服務器的正確方法,Go?是一個開源的編程語言,它能讓構造簡單、可靠且高效的軟件變得容易,具有簡潔、快速、安全,并行、有趣、開源,內存管理、v數(shù)組安全、編譯迅速的特征,需要的朋友可以參考下
    2023-10-10
  • Golang 高效排序數(shù)據(jù)詳情

    Golang 高效排序數(shù)據(jù)詳情

    本文我們介紹了怎么使用 Golang 語言標準庫 sort 包排序數(shù)據(jù),需要注意的是,除了本文使用的類型之外,其它任意類型只要實現(xiàn) sort.Interface 的三個方法,都可以調用 sort.Sort() 函數(shù)排序數(shù)據(jù)。
    2021-11-11
  • Go并發(fā)編程之sync.Once使用實例詳解

    Go并發(fā)編程之sync.Once使用實例詳解

    sync.Once使用起來很簡單, 下面是一個簡單的使用案例,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-11-11

最新評論

泸水县| 定西市| 耒阳市| 江川县| 日喀则市| 察隅县| 同心县| 西和县| 新余市| 黑河市| 化德县| 富顺县| 孟津县| 莒南县| 沧源| 尼木县| 新竹市| 清新县| 宣武区| 吉安市| 武平县| 云霄县| 仪征市| 东莞市| 招远市| 绥棱县| 吴桥县| 锡林郭勒盟| 嘉峪关市| 班戈县| 柳江县| 文山县| 吉安市| 高阳县| 邻水| 曲阜市| 吴川市| 大邑县| 鞍山市| 德阳市| 敖汉旗|