Golang编写规范

Go语言编写规范

  • 声明空的slice应使用下面的格式

    var t []string
    
    /*
    		原因:
    				var t []string  声明了一个nil slice
    				t := []string{}  声明的是一个长度为0的非nil slice
    */
    
  • 打印输出

    //错误字符串不应该大写,应该写成:
    fmt.Errorf("failed to write data")
    //而不是写成
    fmt.Errorf("Failed to write data")
    
  • 缩写词,必须保持一致,比如都大写URL或者小写url。比如HTTP、ID等

  • 常量命名,一般使用驼峰命名方式区分包含多个单词的名称

    const MaxLength
    
  • error处理,不使用_忽略错误。尽量不要使用panic

  • 包名使用单数的形式,比如util、model,而不是utils、models

  • Receiver的名称应该缩写, 如果方法中没有使用receiver,可以省略receiver name

    func (f foo) method() {
        ...
    }
    
    func (foo) method() {
        ...
    }
    
  • 自定义的Error放在package级别中,统一进行维护,并且变量以Err开头

  • 空字符串检查

    //正确写法
    if s == "" {
       ...
    }
    //其他不规范写法
    if len(s) == 0 {
       ...
    }
    if s == nil || s == "" {
       ...
    }
    
  • 非空slice检查

    //正确写法,直接比较长度即可
    if len(s) > 0 {
        ...
    }
    //不规范写法
    if s != nil && len(s) > 0 {
        ...
    }
    
  • 省略不必要的变量,例如error。通常第三方的类会提供带error和不带error的相同方法,如非必需,可选不带error的方法进行调用

  • 直接使用bool值,不需要将它和true/false进行比较

    if b {
       ...
    }
    if !b {
       ...
    }
    
  • byte/string slice相等性比较

    var s1 []byte
    var s2 []byte
    ...
    bytes.Equal(s1, s2) == 0
    bytes.Equal(s1, s2) != 0
    
    /*
       不要使用
    bytes.Compare(s1, s2) == 0
    bytes.Compare(s1, s2) != 0
    */
    
  • append slice

    //精简写法
    var a, b []int
    b = append(b, a...)
    
    //冗余写法
    var a, b []int
    for _, v := range a {
      b = append(b, v)
    }
    
  • 简化range

    var m map[string]int 
    for _ = range m {
        ...
    }
    for _, _ = range m {
        ...
    }
    //可以简化为
    for range m {
        ...
    }
    
发布了622 篇原创文章 · 获赞 150 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/feizaoSYUACM/article/details/96309073