• go 下划线


    一、简介

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

    二、在import中的作用

    例:
    main.go

    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

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

    常用mysql例:

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

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

    三、在代码语句中的作用

    例:

    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

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

  • 相关阅读:
    物联网平台ThingsBoard源码讲解
    行业追踪,2023-09-14
    JAVA--类的继承
    Java高级---Spring Boot---1引言
    Centos安装gitlabce
    详解MySQL脏读幻读不可重复读及事务的隔离级别和MVCC、LBCC实现
    si446使用记录(二):使用WDS3生成头文件
    用C++递归lambda重写二叉树的生成与遍历完整程序
    公众号迁移操作流程是怎样的?
    算法趣题-Q34
  • 原文地址:https://blog.csdn.net/change_any_time/article/details/125484595