Go语言中的下划线
2017-07-07 13:02
176 查看
1.下划线在import中
在Golang里,import的作用是导入其他package,但是今天在看beego框架时看到了import 下划线,不知其意,故百度而解之。import 下划线(如:import _ hello/imp)的作用:当导入一个包时,该包下的文件里所有init()函数都会被执行,然而,有些时候我们并不需要把整个包都导入进来,仅仅是是希望它执行init()函数而已。这个时候就可以使用 import _ 引用该包。即使用【import _ 包路径】只是引用该包,仅仅是为了调用init()函数,所以无法通过包名来调用包中的其他函数。
示例:
代码结构
main.Go
package main import _ "hello/imp" func main() { //imp.Print() //编译报错,说:undefined: imp }1
2
3
4
5
6
7
1
2
3
4
5
6
7
init.go
package imp import "fmt" func init() { fmt.Println("imp-init() come here.") } func Print() { fmt.Println("Hello!") }1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
输出结果:
imp-init() come here.1
1
2.下划线在代码中
package main import ( "os" ) func main() { buf := make([]byte, 1024) f, _ := os.Open("/Users/samchen/Music/text.txt") defer f.Close() for { n, _ := f.Read(buf) if n == 0 { break } os.Stdout.Write(buf[:n]) }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
解释1:
下划线意思是忽略这个变量.
比如os.Open,返回值为*os.File,error
普通写法是f,err := os.Open(xxxxxxx)
如果此时不需要知道返回的错误值
就可以用f, _ := os.Open(xxxxxx)
如此则忽略了error变量
解释2:
占位符,意思是那个位置本应赋给某个值,但是咱们不需要这个值,所以就把该值赋给下划线,意思是丢掉不要,这样编译器可以更好的优化,任何类型的单个值都可以丢给下划线。
这种情况是占位用的,方法返回两个结果,而你只想要一个结果,那另一个就用 _ 占位,而如果用变量的话,不使用,编译器是会报错的。
补充:
import "database/sql" import _ "github.com/go-sql-driver/mysql"1
2
1
2
第二个import就是不直接使用MySQL包,只是执行一下这个包的init函数,把mysql的驱动注册到sql包里,然后程序里就可以使用sql包来访问mysql数据库了。
相关文章推荐
- 【原创】Go语言/Golang 知识简单集锦
- Go语言教程汇总
- 08.go语言解析json
- go 语言 学习日记1(unknown)
- Go语言条件语句
- Go语言变量作用域
- Go语言范围(Range)
- Go语言学习笔记(六) [包]
- 神奇的GO语言:空接口(interface)
- golang实战使用gin+xorm搭建go语言web框架restgo详解5.4 控制器参数绑定
- go语言学习-位运算
- Ubuntu go语言环境
- go语言string、int、int64互相转换[待编辑]
- Go 语言简介(下)— 特性<转载>
- GO语言range的用法
- GO语言实现区块链Part1 Basic Prototype
- [读书笔记] go 语言如何处理系统调用
- Go语言 进程、线程、轻量级进程、协程和go中的Goroutine 那些事儿
- 为什么我们要使用Go语言以及如何使用它的
- Go 语言中 = 和 := 有什么区别