章工运维 章工运维
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)

章工运维

业精于勤,荒于嬉
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)
  • python

  • shell

  • go

    • go基础

      • 指针
      • 数组
      • 切片
      • 字典
      • 结构体
      • 匿名组合
      • 方法
      • 接口
      • error接口
      • panic使用
    • Init函数和main函数
    • 下划线
      • go报错问题收集
      • Redis和MySQL结合的Web服务示例
      • go定义json数据
      • 使用go和vue编写学生管理系统
      • gin框架探索
    • 编程
    • go
    章工运维
    2024-03-07
    目录

    下划线

    “_”是特殊标识符,用来忽略结果。

    # 下划线在import中

     在Golang里,import的作用是导入其他package。
    
    1

    import 下划线(如:import hello/imp)的作用:当导入一个包时,该包下的文件里所有init()函数都会被执行,然而,有些时候我们并不需要把整个包都导入进来,仅仅是是希望它执行init()函数而已。这个时候就可以使用 import 引用该包。即使用【import _ 包路径】只是引用该包,仅仅是为了调用init()函数,所以无法通过包名来调用包中的其他函数。 示例:

    代码结构

        src 
        |
        +--- main.go            
        |
        +--- hello
               |
                +--- hello.go
    
    1
    2
    3
    4
    5
    6
    7
    package main
    
    import _ "./hello"
    
    func main() {
        // hello.Print() 
        //编译报错:./main.go:6:5: undefined: hello
    }
    
    1
    2
    3
    4
    5
    6
    7
    8

    hello.go

    package hello
    
    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

    输出结果:

        imp-init() come here.
    
    1

    # 下划线在代码中

    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])
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

    解释1:

        下划线意思是忽略这个变量.
    
        比如os.Open,返回值为*os.File,error
    
        普通写法是f,err := os.Open("xxxxxxx")
    
        如果此时不需要知道返回的错误值
    
        就可以用f, _ := os.Open("xxxxxx")
    
        如此则忽略了error变量
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    解释2:

        占位符,意思是那个位置本应赋给某个值,但是咱们不需要这个值。
        所以就把该值赋给下划线,意思是丢掉不要。
        这样编译器可以更好的优化,任何类型的单个值都可以丢给下划线。
        这种情况是占位用的,方法返回两个结果,而你只想要一个结果。
        那另一个就用 "_" 占位,而如果用变量的话,不使用,编译器是会报错的。
    
    1
    2
    3
    4
    5

    补充:

        import "database/sql"
        import _ "github.com/go-sql-driver/mysql"
    
    1
    2

    第二个import就是不直接使用mysql包,只是执行一下这个包的init函数,把mysql的驱动注册到sql包里,然后程序里就可以使用sql包来访问mysql数据库了。

    微信 支付宝
    上次更新: 2024/03/11, 10:32:45

    ← Init函数和main函数 go报错问题收集→

    最近更新
    01
    shell脚本模块集合
    05-13
    02
    生活小技巧(认知版)
    04-29
    03
    生活小技巧(防骗版)
    04-29
    更多文章>
    Theme by Vdoing | Copyright © 2019-2025 | 点击查看十年之约 | 鄂ICP备2024072800号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式