美文网首页
GO学习笔记(2) - 语言规范

GO学习笔记(2) - 语言规范

作者: 卡门001 | 来源:发表于2021-06-10 10:35 被阅读0次

    命名规范

    1、适合所有命名规则:包括常量、变量、类型、函数名、结构字段等等
    2、以大写字母开头,如Group1,表示该对象就可以被外部包的代码所使用。
    3、以小写字母命令,则表示对包外不可见
    4、关键字不能作为标识符

    package规范

    1、package名称与目录名保持一致,名称要有意义,不能和标准库冲突;
    2、禁用相对路径;
    3、包名是小写单词,不要使用"_"下划线与混合大小写;

    // wrong
    import "../../../repo"
    
    // correct
    import "github.com/repo/package
    

    文件命名

    1、简单,有意义,小写单词,使用下划线分隔各个单词。
    my_test.go

    结构体命名

    1、 驼峰命名法,首字母根据访问控制大写或者小写
    2、 struct 申明和初始化格式采用多行,例如下面:

    type User struct{
        Username string
        Email  string
    }
    
    //多行初始化
    u :=User{
        Username: "astaxie",
        Email: "astaxie@gmail.com"
    }
    

    接口命名

    1、驼峰命名法,首字母根据访问控制大写或者小写
    2、单个函数的结构名以“er"为后缀,例如Reader,Writer。

    type Reader interface{
        Read(P []type)(n int,err error)
    }
    

    变量命名

    1、命名遵巡驼峰标准,首字母根据访问控制原则大写或者小写
    2、不能使用"_"开头
    3、不允许定义没有用的变量,所有定义的变量都必须用上,否则编译器报错
    4、若变量类型为 bool 类型,则名称应以 Has, Is, Can 或 Allow 开头

    var isExist bool
    var hasConflict bool
    var canManage bool
    var allowGitHook bool复制代码
    

    5、其他特有名词

    • 如果变量为私有,且特有名词为首个单词,则使用小写,如 apiClient
    • 其它情况都应当使用该名词原有的写法,如 APIClient、repoID、UserID
    • 错误示例
      UrlArray,应该写成 urlArray 或者 URLArray

    常量命名

    • 常量以大写开头,单词间用下划线表示
    const APP_VER = "1.0"
    
    • 枚举常量,需要先创建类型
    type Scheme string
    const{
        HTTP Scheme = "http"
        HTTPS Scheme = "https"
    }
    

    注解规范

    • 两种注解风格,分别是C与C++风格。行注解是常态。
    • 块注解不可嵌套,块注解主要显示为包注解,即包的文档描述;也用于注释成块的代码片段。
    /* 多行(块)注解 */  
    //注册内容
    
    • godoc
      为go自带注解生成工具,可生成对应的站点,新版中需要手工安装

    • 包注释:每个包都需要有一个包注释,格式

    //包的基本简介(包名,简介)
    //创建者,    格式: 创建人: rtx 名
    //创建时间,格式: 创建时间: yyyyMMdd
    
    //util包, 该包包含了项目共用的一些常量,封装了项目中一些共用函数。
    //创建人: hanru
    //创建时间: 20190419
    

    函数注解

    1、所有的函数以及结构体头部必须要写注释,注解的规范是名称+说明
    2、如果不写或者是不规范的话,代码虽然可以运行,但是无法通过golint的规范检测。

    // HelloWorld print hello world
    func HelloWorld() {
        fmt.Println("Hello World")
    }
    
    // NewtAttrModel , 属性数据层操作类的工厂方法
    // 参数:
    //      ctx :上下文信息
    // 返回值:
    //      属性操作类指针
    func NewAttrModel(ctx *common.Context) *AttrModel {
    }
    

    结构体注解

    // User , 用户对象,定义了用户的基础信息
    type User struct{
        Username  string // 用户名
        Email     string // 邮箱
    }
    

    代码注解

    //从 Redis 中批量读取属性,对于没有读取到的 id , 记录到一个数组里面,准备从 DB 中读取
    xxxxx
    xxxxxxx
    xxxxxxx复制代码
    

    代码风格

    缩进和折行

    • tab缩进,缩进直接使用 gofmt 工具格式化即
    • 折行方面,一行最长不超过120个字符,超过的请使用换行展示。
    • Goland开发工具,可以直接使用快捷键:ctrl+alt+L,即可。

    语句的结尾

    • 不需要类似于Java需要分号结尾,默认一行就是一条数据
    • 多个语句写在同一行,它们则必须使用 ;

    括号和空格

    • 可直接使用 gofmt 工具格式化
    • go 会强制左大括号不换行,换行会报语法错误
    • 所有的运算符和操作数之间要留空格
    • if表达式,不加()号
    // wrong
    if expression 
    {
      ...
    }
    
    // correct
    if expression {
      ...
    }
    

    import

    • 包部包要用绝对路径;项目内部包对相对路径。
    • 工具goimport,帮我们自动引包,并格式化

    goimport自动引包时,当两外包名一样时,会引起错误,需要自己注意

    import (
        "fmt"
    )
    
    • 多行包的组织方式
    import (
        "encoding/json"
        "strings"
    
        "myproject/models"
        "myproject/controller"
        "myproject/utils"
    
        "github.com/astaxie/beego"
        "github.com/go-sql-driver/mysql"
    ) 
    

    类型转换

    • golang是强制类型转换,不支持隐式类型转换。
    • int和int32以及int64在go中会被视为不同类型

    错误处理

    • 原则:不能丢弃任何有返回err的调用,不要使用 _ 丢弃,必须全部处理接收到错误,要么返回err,或者使用log记录下来
    • 尽早return:一旦有错误发生,马上返回
    • 尽量不要使用panic,除非你知道你在做什么
    • 错误描述如果是英文必须为小写,不需要标点结尾
    • 采用独立的错误流进行处理
    // 错误写法
    if err != nil {
        // error handling
    } else {
        // normal code
    }
    
    // 正确写法
    if err != nil {
        // error handling
        return // or continue, etc.
    }
    // normal code
    

    常用工具

    golint

    代码规范检查工具,一般公司开发环境会限制只有通过golint检查的代码才可以发布

    gofmt

    gofmt 自动格式化代码,保证所有的 go 代码与官方推荐的格式保持一致

    goimport

    go get golang.org/x/tools/cmd/goimports

    go vet

    静态分析源码存在的各种问题,例如多余的代码,提前return的逻辑,struct的tag是否符合标准等。
    go get golang.org/x/tools/cmd/vet

    filewatcher插件

    ideal的filewatcher插件,在保存时会自动格式化代码

    相关文章

      网友评论

          本文标题:GO学习笔记(2) - 语言规范

          本文链接:https://www.haomeiwen.com/subject/afnmqhtx.html