- 前景
- 开发环境
- Go 基础
- 流程控制
- 函数
- 方法
- 面向对象
- 网络编程
- 并发编程
- 数据操作
- 常用标准库
- beego 框架
- gin 框架
- 微服务
- 插件库
- 项目
- 开源仓库
- go 学习线路图
- 音频和音乐
- 身份验证和 OAuth
- 机器人相关
- 标准 CLI
- 构建用户界面库
- 配置
- 持续集成
- CSS 预处理器
- 数据结构
- 数据库
- 数据库驱动
- 日期和时间
- 分布式系统
- 电子邮件
- 嵌入式脚本语言
- 错误处理
- 文件
- 金融
- Forms
- 功能性
- 游戏开发
- 生成与泛型
- 地理位置
- 编译器
- Goroutines
- 图形界面
- 图片
- 物联网
- 工作计划
- JSON格式
- Logging
- 机器学习
- 实现消息传递
- 微软办公软件
- 依赖注入
- 项目布局
- Strings
- 其他
- 自然语言处理
- 网络
- HTTP 客户端
- OpenGL
- ORM
- 包管理
- 性能
- 查询语言
- 资源嵌入
- 科学与数据分析
- 安全
- 序列化
- 服务器应用
- 流处理
- 模板引擎
- 测试
- 文字处理
- 第三方 API
- 实用工具
- UUID
- 验证方式
- 版本控制
- 视频
- Web 框架
- 中间件
- 路由器
- 视窗
- XML 格式
- 代码分析
- 编辑器插件
- 硬件
- go 生成工具
- go 工具
- DevOps 工具
- 其他
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
下划线
“_”是特殊标识符,用来忽略结果。
1.1.1. 下划线在import中
在Golang里,import的作用是导入其他package。
import 下划线(如:import hello/imp)的作用:当导入一个包时,该包下的文件里所有init()函数都会被执行,然而,有些时候我们并不需要把整个包都导入进来,仅仅是是希望它执行init()函数而已。这个时候就可以使用 import 引用该包。即使用【import _ 包路径】只是引用该包,仅仅是为了调用init()函数,所以无法通过包名来调用包中的其他函数。 示例:
代码结构
src
|
+--- main.go
|
+--- hello
|
+--- hello.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!")
}
输出结果:
imp-init() come here.
1.1.2. 下划线在代码中
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:
下划线意思是忽略这个变量.
比如os.Open,返回值为*os.File,error
普通写法是f,err := os.Open("xxxxxxx")
如果此时不需要知道返回的错误值
就可以用f, _ := os.Open("xxxxxx")
如此则忽略了error变量
解释2:
占位符,意思是那个位置本应赋给某个值,但是咱们不需要这个值。
所以就把该值赋给下划线,意思是丢掉不要。
这样编译器可以更好的优化,任何类型的单个值都可以丢给下划线。
这种情况是占位用的,方法返回两个结果,而你只想要一个结果。
那另一个就用 "_" 占位,而如果用变量的话,不使用,编译器是会报错的。
补充:
import "database/sql"
import _ "github.com/go-sql-driver/mysql"
第二个import就是不直接使用mysql包,只是执行一下这个包的init函数,把mysql的驱动注册到sql包里,然后程序里就可以使用sql包来访问mysql数据库了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论