栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

【Go】Go语言中的下划线

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Go】Go语言中的下划线

文章目录
  • 一、下划线是什么:一种特殊的标识符
  • 二、下划线怎么用
    • 1. 下划线在 import 中
      • 包导入的常规语法
      • 包导入的一些 “花操作” 的语法
        • (1)点操作
        • (2)别名操作
        • (3)本文关注的重点:_ 操作
    • 2. 下划线在代码中
  • 参考链接


一、下划线是什么:一种特殊的标识符

Go语言中,“_” 是一种特殊的标识符,用来忽略结果。


二、下划线怎么用 1. 下划线在 import 中

在Go 语言里,import 的作用是导入其他 package。

包导入的常规语法
import(
	"fmt"
)
//然后在代码里面可以通过如下的方式调用
fmt.Println("hello world")

这个 fmt 是Go语言的标准库,他其实是去GOROOT下去加载该模块,当然Go的 import 还支持如下两种方式来加载自己写的模块:

//相对路径     
import   "./test_model"  //当前文件同一目录的test_model目录,但是不建议这种方式import
​
//绝对路径    
import   "mygoproject/test_model"  //加载GOPATH/src/mygoproject/test_model模块   
包导入的一些 “花操作” 的语法 (1)点操作

有时候会看到如下的方式导入包

import . “fmt”

这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调用的

fmt.Println(“hello world”)  
//可以省略的写成
Println(“hello world”)
(2)别名操作

别名操作顾名思义可以把包命名成另一个用起来容易记忆的名字

import( f “fmt” )   
//别名操作调用包函数时前缀变成了重命名的前缀,即
f.Println(“hello world”)
(3)本文关注的重点:_ 操作

我们都知道,当导入一个包时,该包下的文件里的所有 init() 函数都会被执行。

然而,有些时候我们并不需要把整个包都导入进来,仅仅是希望它执行 init() 函数而已。这个时候就可以使用 import _ 来引用该包。即,使用【import _ 包名】来引用该包,仅仅是为了调用该包中的 init() 函数,所以无法通过包名来调用包中的其他函数。

实例:

代码结构:

src 
|
+--- main.go            
|
+--- hello
       |
        +--- hello.go

main.go:

package main

import _ "./hello"

func main() {
    // hello.Print() 
    //编译报错:./main.go:6:5: undefined: hello
}

hello.go:

package hello

import "fmt"

func init() {
    fmt.Println("imp-init() come here.")
}

func Print() {
    fmt.Println("Hello!")
}

main.go 的执行结果:

imp-init() come here.

说明:main.go 使用 import _ "./hello" 导入 hello 包,会执行 hello 包中的 init() 函数,而无法调用其他函数。
所以我们使用 import _ package 导入一个包,就只是为了执行该包的 init() 函数,而不需要调用包中的其他函数。

为什么我们有时只需要该包的 init() 函数被执行?

实例:

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

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

2. 下划线在代码中
package main

import (
    "os"
)

func main() {
    buf := make([]byte, 1024)
    f, _ := os.Open("/UsersDesktop/text.txt")
    defer f.Close()
    for {
        n, _ := f.Read(buf)
        if n == 0 {
            break    

        }
        os.Stdout.Write(buf[:n])
    }
}

解释1:

下划线意思是 忽略 这个变量。

比如os.Open,返回值为*os.File,error

普通写法是 f,err := os.Open("xxxxxxx")

如果此时,我们不需要知道返回的错误值 err 是多少

就可以用 f, _ := os.Open("xxxxxx")

如此则忽略了error变量。

解释2:

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


参考链接
  1. 下划线
  2. Go导入包的几种方式(import)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/909139.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号