• 你好!欢迎你的到来
  • 关于我们
  • 首页 博客 学习笔记 技术导航 工具
  • 博文分类
    • PHP(43)
    • MySQL(11)
    • Linux(28)
    • html(3)
    • JQuery(4)
    • JavaScript(9)
    • svn(2)
    • CSS(2)
    • seajs(1)
    • go(44)
    • redis(1)
    • nginx(8)
    • mongo(0)
    • java(0)
    • 算法(0)
    • 其他(26)
    • 生活(1)
    专栏
    • Jquery基础教程
      • 文章:(15)篇
      • 阅读:18649
    • shell命令
      • 文章:(42)篇
      • 阅读:65544
    • Git教程
      • 文章:(36)篇
      • 阅读:124480
    • leetCode刷题
      • 文章:(37)篇
      • 阅读:17360
    • 摘要视图
    • 目录视图
    golang中下划线的使用
    2018-12-05 17:11 阅读(1922) 评论(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)
    }


    本文为原创文章,请尊重辛勤劳动,如需转载,请保留本文地址
    http://www.findme.wang/blog/detail/id/533.html

    若您感觉本站文章不错,读后有收获,不妨赞助一下?

    我要赞助

    您还可以分享给朋友哦

    更多
    顶
    0
    踩
    0
    • 上一篇: MySQL中You can't specify target table '*' for update in FROM clause
    • 下一篇: xshell中如何设置快捷键
    • 查看评论
    • 正在加载中...
    • 留言
    • 亲,您还没有登录,登录后留言不需要审核哦!
      可以使用如下方式登录哦!
  • CSDN | 新浪微博 | github | 关于我们 | 我要留言 | 友链申请
  • 豫ICP备18038193号    Copyright ©lidequan All Rights Reserved