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

2021-06-10  本文已影响0人  卡门001

命名规范

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、其他特有名词

常量命名

const APP_VER = "1.0"
type Scheme string
const{
    HTTP Scheme = "http"
    HTTPS Scheme = "https"
}

注解规范

/* 多行(块)注解 */  
//注册内容
//包的基本简介(包名,简介)
//创建者,    格式: 创建人: 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复制代码

代码风格

缩进和折行

语句的结尾

括号和空格

// wrong
if expression 
{
  ...
}

// correct
if expression {
  ...
}

import

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

import (
    "fmt"
)
import (
    "encoding/json"
    "strings"

    "myproject/models"
    "myproject/controller"
    "myproject/utils"

    "github.com/astaxie/beego"
    "github.com/go-sql-driver/mysql"
) 

类型转换

错误处理

// 错误写法
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插件,在保存时会自动格式化代码

上一篇下一篇

猜你喜欢

热点阅读