分享
  1. 首页
  2. 文章

Go 语言 import 下划线 _ 使用说明

痞子汤 · · 3364 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

// main project main.go
package main
import (
	"fmt"
	//_ "main/hello/imp"
	"main/hello/imp"
	"runtime"
)
func main() {
	for skip := 0; ; skip++ {
		pc, file, line, ok := runtime.Caller(skip)
		if !ok {
			break
		}
		fmt.Printf("skip = %v, pc = %v, file = %v, line = %v\n", skip, pc, file, line)
	}
	imp.Print()
}
package imp
import (
	"fmt"
)
func init() {
	fmt.Println("imp-init come here.")
}
func Print() {
	fmt.Println("Hello World! in package imp")
}

输出:

imp-init come here.
skip = 0, pc = 4762118, file = C:/Go/mycode/src/main/main.go, line = 13
skip = 1, pc = 4366150, file = C:/Go/src/runtime/proc.go, line = 185
skip = 2, pc = 4513537, file = C:/Go/src/runtime/asm_amd64.s, line = 2197
Hello World! in package imp

如果修改 main.go 的 import 为一下形式:

// main project main.go
package main
import (
	"fmt"
	_ "main/hello/imp" //这里前面加上了 _
	//"main/hello/imp"
	"runtime"
)
func main() {
	for skip := 0; ; skip++ {
		pc, file, line, ok := runtime.Caller(skip)
		if !ok {
			break
		}
		fmt.Printf("skip = %v, pc = %v, file = %v, line = %v\n", skip, pc, file, line)
	}
	imp.Print() //这已经将会提示编译失败
}

输出:

C:/Go/bin/go.exe build -i [C:/Go/mycode/src/main]
# main
.\main.go:20: undefined: imp in imp.Print
错误: 进程退出代码 2.

前面加上了 _ 说明只能调用 init.go 里面的 init() 函数, 当然你不能显示的在 main.go 里面调用

imp.init()

// main project main.go
package main
import (
	"fmt"
	_ "main/hello/imp"
	//"main/hello/imp"
	"runtime"
)
func main() {
	for skip := 0; ; skip++ {
		pc, file, line, ok := runtime.Caller(skip)
		if !ok {
			break
		}
		fmt.Printf("skip = %v, pc = %v, file = %v, line = %v\n", skip, pc, file, line)
	}
	imp.init()
	//imp.Print()
}

输出:

C:/Go/bin/go.exe build -i [C:/Go/mycode/src/main]
# main
.\main.go:19: undefined: imp in imp.init
错误: 进程退出代码 2.

---------------------------------------------------------------------------------------------------

import(. "fmt") 这个点操作的含义就是这个包导入之后在你调用这个包的函数时,
你可以省略前缀的包名,也就是前面你调用的fmt.Println("hello world") 
可以省略的写成Println("hello world")
import(f "fmt") 别名操作调用包函数时前缀变成了重命名的前缀,
即f.Println("hello world")

有疑问加站长微信联系(非本文作者)

本文来自:开源中国博客

感谢作者:痞子汤

查看原文:Go 语言 import 下划线 _ 使用说明

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
3364 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏