所属分类:php教程
说在前面,这只是我们团队的一套规范而已。
今天我们聊一下 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...
php入门到就业线上直播课:立即学习
全程直播 + 实战授课 + 边学 + 边练 + 边辅导
以上就是分享一套Go编码规范!欢迎收藏!的详细内容,更多请关注zzsucai.com其它相关文章!