标识符的本质:每个标识符对应一个具有数据结构的值,但是这个值不方便直接访问,我们可以通过对其对应的标识符来访问数据,标识符就是一个指代。

命名规范

  • 标识符采用CamelCase驼峰命名法

如果只在包内可用,就采用小驼峰命名

如果要在包外可见,就采用大驼峰命名

  • 简单循环变量可以使用i、j、k、v等
  • 条件变量、循环变量可以是单个字母或单个单词,Go倾向于使用单个字母。Go建议使用更短小
  • 常量驼峰命名即可

在其他语言中,常量多使用全大写加下划线的命名方式,Go语言没有这个要求

对约定俗成的全大写,例如PI

  • 函数/方法的参数、返回值应是单个单词或单个字母
  • 函数可以是多个单词命名
  • 类型可以是多个单词命名
  • 方法由于调用时会绑定类型,所以可以考虑使用单个单词
  • 包以小写单个单词命名,包名应该和导入路径的最后一段路径保持一致
  • 接口优先采用单个单词命名,一般加er后缀。Go语言推荐尽量定义小接口,接口也可以组合

变量的可见性

1、包级标识符

在go语言中,在.go文件中的顶层代码中,定义的标识符成为包级标识符,如果首字符大写则包外可见,否则仅包内可见

// 定义无类型常量
var a = 20 //int
var b = 3.14 //float64

//延迟初始化需要指定类型,用零值先初始化,因为若不给出类型,无法判断是什么类型的零值
// 有相同关系的声明可以使用同一批定义
var (
    name string
    age  int
)

使用建议:

  • 顶层代码中定义的包级别标识符,遵循【首字符大写包外可见】
  • const定义包级别常量,必须声明时初始化
  • var定义包级别变量:可以指定类型,也可以使用无类型常量定义;延迟赋值必须指定类型
  • 有相关关系的可以批量定义在一起
  • 一般声明时考虑【就近原则】,尽量靠近第一次使用的地方声明
  • 不能使用短格式定义
2、局部标识符

定义在函数中,main中。适用建议:

  • 在函数中定义的标识符
  • const定义局部常量
  • var定义局部变量:可以指定类型,也可以使用无类型常量定义;延迟赋值必须指
  • 有相关关系的可以批量定义在一起
  • 在函数内,直接赋值的变量多用短格式定义

包名称

package dao
package service

文件名称

customer_dao.go

结构体命名

type CustomerOrder struct {
    Name string 
    Address string
}
order := CustomerOrder{"tom", "北京海淀"}

接口命名

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

变量

  • 包级别标识符不可以使用短格式,一般声明时,还是考虑“就近原则”,尽量靠近第一次使用的地方声明
  • 在函数内的标识为局部标识符,多采用短格式定义,
var isExist bool
var hasConflict bool
var canManage bool
var allowGitHook bool

常量

type Scheme string

const (
    HTTP  Scheme = "http"
    HTTPS Scheme = "https"
)

iota

iota是一个可被编译器修改的常量,它的默认开始值是0,每调用一次就加1,遇到const关键字就充值为0

const (
		a = iota // 0
		b        // 1
		c        // 2
		_        // 按道理是3,但是丢弃了
		d        // 4
		e = 10   // 10
		f        // 10
		g = iota // 7
		h        // 8
	)

字面量

go语言中boolen rune integer float complex string都是字面常量。

100
0x6162 0x61_62_63
3.14
3.14e2
3.14E-2
'测'
'\u6d4b'
'\x31'
'1'
'\n'
"abc" "\x61b\x63"
"测试" "\u6d4b试"
"\n"
true
false
iota
//以上字面常量在Go中也被称为无类型常量untyped constant。无类型常量的缺省类型为bool、rune、
int、float64、complex128或字符串

零值

int为0
float为0.0
bool为false
string为空串""(注意是双引号)
指针类型为nil