1、下划线在import中
当导入一个包时,该包下的文件里所有init()
函数都会执行,然而,有些时候我们并不需要把整个包都导入进来,仅仅是希望它执行init
函数而已。这个时候就可以使用import
引用该包。即使用import _ path
只是引用该包,仅仅是为了调用init()
函数,所以无法通过包名来调用包中的其他函数。
2、下划线在代码中
package main
import ("os")
func main() {
buf := make([]byte, 1024)
f,_ := os.Open("/Users/****/Desktop/text.txt")
defer f.Close()
for {
n,_ := f.Read(buf)
if n == 0 {
break
}
}
os.Stdout.Write(buf[:n])
}
解释:
-
下划线就是忽略这个变量的意思,比如:
os.Open
,返回值为*os.File,error
。普通写法是f,err := os.Open("...")
,此时如果不需要知道返回的错误值,就可以使用f,_ := os.Open("...")
,忽略error
变量 -
占位符,意思是哪个位置应该赋给某个值,但是在程序段中不需要这个值,所以就把值赋值给下划线,意思是丢掉不要。这个编译器可以更好的优化,任何类型的单个值都可以丢给下划线。这种情况是占位用的,方法返回两个结果,而你只想要一个结果,那另一个就用_占位,而如果用变量的话,不使用,编译器是会报错的
-
在使用多重赋值时,使用下划线忽略某个值时,该值也叫做匿名变量(anonymous variable)。匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。