9.5 自定义包和可见性 go mod
the-way-to-go_ZH_CN/09.5.md at master · Unknwon/the-way-to-go_ZH_CN https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/09.5.md
package main
import (
"./pack1"
"fmt"
)
func main() {
fmt.Println(pack1.Pack1Int)
s := pack1.ReturnStr()
fmt.Print(s)
}
主程序利用的包必须在主程序编写之前被编译。主程序中每个 pack1 项目都要通过包名来使用:pack1.Item
。具体使用方法请参见示例 4.6 和 4.7。
因此,按照惯例,子目录和包之间有着密切的联系:为了区分,不同包存放在不同的目录下,每个包(所有属于这个包中的 go 文件)都存放在和包名相同的子目录下:
Import with .
:
import . "./pack1"
当使用.
来做为包的别名时,你可以不通过包名来使用其中的项目。例如:test := ReturnStr()
。
在当前的命名空间导入 pack1 包,一般是为了具有更好的测试效果。
Import with _
:
import _ "./pack1/pack1"
pack1包只导入其副作用,也就是说,只执行它的init函数并初始化其中的全局变量。
GO 导入自定义包 - 简书 https://www.jianshu.com/p/4fba6ce388b2
Go -- 多个go文件包名都是main - ma_fighting - 博客园 https://www.cnblogs.com/mafeng/p/6871753.html
shawn@a:~/gokit/microKit$ cat m.go
// 2020/9/18 10:31 Shawn
package main
import (
"fmt"
_ "LG/p0"
)
func main() {
fmt.Println("main")
}
shawn@a:~/gokit/microKit$ cat p0/p0.go
// 2020/9/18 10:44 Shawn
package p0
import "fmt"
// 插件注册
func init() {
fmt.Println("p0")
}
shawn@a:~/gokit/microKit$ cat p0/t.go
// 2020/9/18 10:44 Shawn
package p0
import "fmt"
// 插件注册
func init() {
fmt.Println("p0-t")
}
shawn@a:~/gokit/microKit$
shawn@a:~/gokit/microKit$ go run *.go
p0
p0-t
main-dir-0
main
shawn@a:~/gokit/microKit$ tree
├── go.mod
├── m1.go
├── m.go
└── p0
├── p0.go
└── t.go
1 directory, 5 files
shawn@a:~/gokit/microKit$ cat m1.go
// 2020/9/18 11:39 Shawn
package main
import "fmt"
func init() {
fmt.Println("main-dir-0")
}
func F() {
fmt.Println("main-dir-0-F")
}
shawn@a:~/gokit/microKit$ cat m.go
// 2020/9/18 10:31 Shawn
package main
import (
"fmt"
_ "LG/p0"
)
func main() {
fmt.Println("main")
// F()
}
shawn@a:~/gokit/microKit$
├── go.mod
├── m1.go
├── m.go
└── p0
├── p0.go
└── t.go