- GO语言编程从入门到实践
- 黄永祥
- 585字
- 2023-08-31 19:57:00
2.1.3 空白标识符
在Go语言中还定义了一些特殊标识符,在安装目录doc文件夹的go_spec.html文件中能找到相应说明,如图2-3所示。
图2-3 预定义标识符
官方文档将标识符分为4种类型,分别是空白标识符(Blank identifier)、预声明标识符(Pre declared identifiers)、导出标识符(Exported identifiers)和唯一标识符(Uniqueness of identifiers)。
空白标识符仅由下划线(_)表示,作为匿名占位符,因为Go语言定义变量且不被使用的时候,程序会提示异常,对于不被使用且存在的变量,可以使用空白标识符表示,并且能减少内存空间开支,一般用于3种场合,具体说明如下:
1)导入某个包,只执行包的初始化函数init(),不调用包的任何变量或函数,使用import _ XXX可以避免编译错误。
2)函数设有多个返回值,但程序中只使用一个返回值,不被使用的返回值可以使用空白标识符表示。
3)类型断言,判断某个类型是否实现了接口,否则编译出错。
根据上述3种应用场合,在chapter2.1.3.go文件中分别使用代码加以说明,代码如下:
package main // 场合一 // 只使用net/http/pprof的初始化函数init() import ( "fmt" _ "net/http/pprof" ) func myfunc() (int, string){ // 自定义函数,设置两个返回值 a := 10 b := "golang" return a, b } type Foo interface { // 定义接口 Say() } type Dog struct { // 定义结构体 name string } func (d Dog) Say() { // 结构体实现接口Foo的使用 fmt.Println(d.name + " say hi") } func main(){ // 场合二 // 调用函数myfunc()并只获取第一个返回值 a, _ := myfunc() fmt.Printf("只获取函数myfunc的第一个返回值%d:\n", a) // 场合三 // 判断结构体Dog是否实现接口Foo的使用 // 等同于判定有没有定义func (d Dog) Say(){} // 用作类型断言,如果Dog没有实现Foo,则会报编译错误 var _ Foo = Dog{"black dog"} }