“_”是特殊标识符,用来忽略结果。
1. 下划线在import中
在golang中,import的作用是导入其他package。
import下划线的作用:当导入一个包时,该包下的文件里所有init()函数都会被执行,然而,有些时候我们并不需要把整个包导入,仅仅是希望它执行init()函数而已。这个时候可以使用import引用该包。即使用(import _ 包路径)只是引用该包,仅仅是为了调用init()函数,所以无法通过包名来调用包中的其他函数。
示例:
目录结构:
2. 下划线在代码中
package mainimport ("os")func main() {buf := make([]byte, 1024)f, _ := os.Open("/User/***/Desktop/test.txt")defer f.Close()for {n, _ := f.Read(buf)if n == 0 {break}os.Stdout.Write(buf[:n])}}
解释1:
下划线的意思是忽略这个变量。
比如:os.Open,返回值为*os.File,error
普通写法是 f, err := os.Open(“filename”)
如果此时不需要知道返回的错误值
就可以用 f, _ := os.Open(“filename”)
此时忽略了error这个变量值
解释2:
占位符,意思是那个位置本应赋值给某个值,但是我们不需要这个值。
所以就把该值赋给下划线,意思是丢掉不要。
这样编译器可以更好的优化,任何类型的单个值都可以丢给下划线。
这种情况是占位用的,方法返回两个结果,而你只想要一个结果。
那另一个就用”_”占位,而如果用变量的话,不使用,编译器是会报错的。
补充:
import “database/sql”
import _ “github.com/go-sql-driver/mysql”
第二个import就是不直接使用mysql包,只是执行以下这个包的init函数,把mysql的驱动注册到sql包中,然后程序里就可以使用sql包来访问mysql数据库了。