Go编码规范有哪些

发布时间:2022-12-09 17:44:59 作者:iii
来源:亿速云 阅读:181

本文小编为大家详细介绍“Go编码规范有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go编码规范有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

1. 代码风格

1.1 代码格式
// 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")
1.2 声明、初始化和定义
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!"
}
1.3 error 处理
// 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")
}
1.4 panic处理
1.5 单元测试

2. 命名规范

在每个语言中,命名规范在代码规范中非常重要,一个统一的、精确的命名不仅仅可以提高代码的可读性,也可以让人觉的这个同志真的会呀。牛!

2.1 包命名规范
2.2 文件命名规范
2.3 函数命名规范
2.4 结构体命名规范
type Student struct{
    Name string
    Age uint8}student := Student{
    Name: "张三",
    Age: 18,}
2.5 变量命名规范
var isExit boolvar canReturn bool
2.6 常量命名规范
type Code intconst (
    ErrNotFound Code = iota
    ErrFatal)

3. 类型

3.1 字符串

好像学过的语言中,都是从字符串开始说起的。就像写代码第一行都是从 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):]}
3.2 切片 slice
// 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...)
3.4 结构体 struct
type Student struct{
    Name string
    Age uint8}student := Student{
    Name: "张三",
    Age: 18,}

4. 控制语句

4.1 if
if err := InitConfig; err != nil {
    return err}
4.2 for
// 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()
    }()}
4.3 range
for _, v := range students {
    ...}for i, _ := range students {
    ...}for i, v := range students {
    ...}

注: 若操作指针时请注意不能直接用 s := v。想知道可以评论区告诉我哦!

4.4 switch
switch type {
    case 1:
        fmt.Println("type = 1")
        break
     case 2:
        fmt.Println("type = 2")
        break
     default :
        fmt.Println("unKnown type")}
4.5 goto

5. 函数

5.1 函数参数
5.2 defer
5.3 代码嵌套

6. 日常使用感悟

6.1 提高性能
6.2 避免踩坑

读到这里,这篇“Go编码规范有哪些”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. go语言与其它开源语言比较具有哪些优势
  2. Java的编码规范有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

go

上一篇:javascript怎么替换光标选中的文字

下一篇:python字典应用实例代码分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》