-
博文分类专栏
- Jquery基础教程
-
- 文章:(15)篇
- 阅读:46561
- shell命令
-
- 文章:(42)篇
- 阅读:154228
- Git教程
-
- 文章:(36)篇
- 阅读:234845
- leetCode刷题
-
- 文章:(76)篇
- 阅读:131788
-
golang中下划线的使用2018-12-05 17:11 阅读(6459) 评论(0)
在golang中,下划线主要起到忽略的作用,可以在以下方面体现:
一、在import引入包前,限制仅仅使用包里面的init函数
在go里面,我们可以通过import来引入包,但是引入包后,我们必须使用该包,否则就会报错:
imported and not used
可能,有的时候,我们引入一个包,仅仅是为了执行包里面的init()函数,这个时候,就可以使用下划线"_"了
src |+--- main.go |+--- test | +--- t1.go
main.go
package main import ( _ "test/algo" "fmt" ) func main() { fmt.Println("hello") }
t1.go
package test import "fmt" func init() { fmt.Println("init test") doSome() } func doSome() { fmt.Println("do some") }
此时,就不会报错了。
二、用在返回值,表示忽略这个值
比如在if语句里面,判断某个map里面,是否存在某个key,如下:
userBooks := map[string]string{"book1" :"dq1", "book2" :"dq2", "book3":"dq3"} //判断 userBooks 是否存在key为book1的值 if _, isExist := userBooks["book1"]; isExist { fmt.Println("book1 exist") } else { fmt.Println("book1 not exist") }
上面案例中,下划线"_"代表数组key对应的value,如果key不存在,则为value 类型的零值。
使用“_”来表示返回值,就可以避免“declared and not used”报错了。
三、用在接口前,验证某个类型是否实现了该接口
针对php或java语言,可以通过implements来实现某个接口,进行就会约束对应的类,必须实现接口的所有方法。但go语言,是通过组合来实现继承或是实现接口。这样就没有强制性约束,怎么搞呢?
很多时候,我们可以把某类型的实例,赋值给接口,通过报错来判断,对应的类型是否实现了接口,如下:
package main import ( _ "test/algo" ) type Person interface { say() } type Student struct { } type Cat struct { } func (s Student) say() { } func main() { var _ Person = Student{} var _ Person = Cat{} //Error:Cat does not implement Person (missing say method) }