最近、プロジェクト内の多くの Go 言語コードをコードレビューしたので、メモの記録としてコードの仕様をまとめる必要があります。
前述したように、これは私たちのチームの単なる規範です。
今日は Go のコーディング標準について説明します。これは、パッケージ インジェクション/変数/定数の命名、基本構文、関数、エラー処理、エクスペリエンスなど、いくつかの主要なモジュールに大別されます。 [推奨: golang チュートリアル ]
import ../util/net
// bad "github.com/google/uuid" // good uuid "github.com/google/uuid"
import ( // Go 标准库 "fmt" //第三方包 "github.com/jinzhu/gorm" "github.com/google/uuid" "github.com/go-redis/redis/v8" // 匿名包 /import mysql driver _"github.com/jinzhu/gorm/dialects/mysql" // 内部包 slice "xxx.local/pkg/v1/goslice" meta "xxx.local/pkg/v1/meta" gomap "xxx.local/pkg/v2/gomap")
var ( port = 8081 metricServerPort = 2001)
// bad stu := new(S) stu.Name = "张三" // good stu := &S{ Name:"李四" }
users := make(map[int]string, 10)tags := make([]int, 0, 10)
// bad var _f string F() func F() string { return "hello world!" } // good var _f F() func F() string { return "hello world!" }
// bad func InitConfig() error { ... } InitConfig() // good func InitConfig() error { ... } err := InitConfig() if err != nil { ... } // or _ := InitConfig()
// bad func InitConfig() (error,int) { ... } // good func InitConfig() (int, error) { ... }
// bad res, err := InitConfig() if err != nil || res != nil { return err } // good res, err := InitConfig() if err != nil { return err } if res != nil { return fmt.Errorf("invalid result") }
どの言語においても、命名規則はコード仕様において非常に重要であり、統一された正確な命名はコードの読みやすさを向上させるだけでなく、このコードは、この仲間が本当にそのやり方を知っていると人々に思わせることもできます。牛!
type Student struct{ Name string Age uint8}student := Student{ Name: "张三", Age: 18,}
var isExit boolvar canReturn bool
type Code intconst ( ErrNotFound Code = iota ErrFatal)
好像学过的语言中,都是从字符串开始说起的。就像写代码第一行都是从 Hello World!一样!同意的点赞哈。
// bad if s == "" { ...} // good if len(s) == 0 { ...}
// bad var s1 "hello world"var s2 "hello"var s3 strings.TrimPrefix(s1, s2) // good var s1 "hello world"var s2 "hello"var s3 stringif strings.HasPrefix(s1, s2){ s3 = s1[len(s2):]}
// bad s := []string{}s := make([]string, 10) // good var s []string s := make([]string, 0, 10)
//bad if len(slice) >0 { ...} // good if slice != nil && len(slice) > 0 { ...}
// badvar b1,b2 []bytefor i, v := range b1 { b2[i] = v}for i := range b1 { b2[i] = b1[i]}// goodcopy(b2,b1)
// bad var a,b []intfor _, v := range a { b = append(b,v)} // good var a, b []int b := append(b, a...)
type Student struct{ Name string Age uint8}student := Student{ Name: "张三", Age: 18,}
if err := InitConfig; err != nil { return err}
// bad for file := range files { fd, err := os.Open(file) if err != nil { return err } defer fd.close()} // good for file := range files{ func() { fd,err := os.open(file) if err!=nil { return err } defer fd.close() }()}
for _, v := range students { ...}for i, _ := range students { ...}for i, v := range students { ...}
注: 若操作指针时请注意不能直接用 s := v。想知道可以评论区告诉我哦!
switch type { case 1: fmt.Println("type = 1") break case 2: fmt.Println("type = 2") break default : fmt.Println("unKnown type")}
本篇很讲了 Go 语言的编码规范,当时想说的,规范是大家预定的东西,每个公司、团队都会有不一样的规范,只要大家一起遵循就好啦。你可以根据自己团队的需求,定一套属于自己团队的项目规范。如果想小伙伴一起遵循,可以借助一些工具来保障执行度。
讲了很多,虽然很基础,希望对于刚刚转 Go 语言,或者刚学习 Go 语言的同学有帮助吧。今天就到这里了。希望得到大家的一键三连。感谢!
本文系转载,原文链接:mp.weixin.qq.com/s/lfjP9DEia2WL4Ua...
以上がGo コーディング標準のセットを共有してください。収集へようこそ!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。