Vor kurzem habe ich im Projekt viele Go-Sprachcodes überprüft. Es ist notwendig, die Codespezifikationen zusammenzufassen, die als Notizdatensatz betrachtet werden können.
Wie bereits erwähnt handelt es sich dabei lediglich um eine Reihe von Normen für unser Team.
Heute sprechen wir über die Codierungsstandards von Go, die grob in mehrere Hauptmodule unterteilt sind, wie z. B. Paketnotizen/Variablen-/Konstantenbenennung, grundlegende Syntax, Funktionen, Fehlerbehandlung, Erfahrung usw. [Empfohlen: golang-Tutorial
1.1 Codeformatimport ../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...
Das obige ist der detaillierte Inhalt vonTeilen Sie eine Reihe von Go-Codierungsstandards! Willkommen zum Sammeln!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!