최근 프로젝트에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!