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

命名规范

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: "[email protected]"
}

接口命名

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) - 语言规范)