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

 

posted @ 2018-08-30 10:51  papering  阅读(290)  评论(0编辑  收藏  举报