关键字

关键字 (keyword) 也叫 保留字 (reserved word), 是编程语言中预先被定义,有特定意义的词。

目前 go 中一共有 25 个关键字。

break     default      func    interface  select
case      defer        go      map        struct
chan      else         goto    package    switch
const     fallthrough  if      range      type
continue  for          import  return     var

标识符

标识符 (identifier) 是用来识别物体的名称,即程序员自己取的名字,如变量名,类名,函数名,包名等可以更改的都是只能是标识符 。

预定义标识符

预定义标识符即编程语言预先被定义的一些有特定意义的词,和关键字有些类似。

目前 go 中有 36 个预定义标识符

内建常量: true false iota nil
内建类型: int int8 int16 int32 int64
          uint uint8 uint16 uint32 uint64 uintptr
          float32 float64 complex128 complex64
          bool byte rune string error
内建函数: make len cap new append copy close delete
          complex real imag
          panic recover

空标识符

go 中的空标识符即 _, 这是一个特殊的标识符。在 go 中,变量声明了就必须使用,在这种环境下就诞生了空标识符。

空标识符会被编译器自动忽略,所以一般只能当做占位符使用。

一般有这么几种使用情况

  • 在导包前使用,目的是只使用包中的 init 函数,而不使用该包中的其他变量或函数。如
_ "github.com/go-sql-driver/mysql"
  • 函数有多个返回值,而只会使用到其中一些返回值,用于忽略其他返回值,如
for _, i := range "abc" {
	fmt.Println(i)
}
  • 编译前检查某类型是否实现了某接口,在 go 中类型实现接口是自动的,我们难以判断是否实现了接口,这时候我们可以利用空白标识符来检查,当然,如果使用了一个优秀的 ide,那么编写的过程中便有提醒
type dog struct {
}

//func (d dog) sleep() {
//	panic("implement me")
//}

type animal interface {
	sleep()
}

// 如果 dog 实现了 animal 接口,那么可以赋值,否则会出错
var _ animal = dog{}

预定义标识符和关键字的区别

  • 标识符都是可以自定义修改的,而关键字无法修改

可以查看 标准库 builtin

// bool is the set of boolean values, true and false.
type bool bool

// true and false are the two untyped boolean values.
const (
	true  = 0 == 0 // Untyped bool.
	false = 0 != 0 // Untyped bool.
)

可以看到这些预定义标识符都是可以修改的,当然建议不要改

  • 关键字都有特定的使用语法,而预定义标识符则使用条件更宽泛

当然,这是在 go 中,go 的关键字多是语句语法,而预定义标识符多是类型

  • 标识符不能使用关键字,而可以使用预定义标识符

标识符的命名

也就是 常量名,变量名,函数名,包名,文件名,目录名,项目名等,尤其是 变量的命名,是大多数程序员头疼的原因之一。关于标识符的合法命名和推荐命名规则详情可以查看 [这篇文章]()。

其他

一门语言的特性几乎就由这些关键字和标识符所表示,后面的大多数知识点都是围绕这些展开的。