只讨论go mod模式情况。
cd /tmp;mkdir testgomod;cd testgomod
go mod init testxxx
创建一些文件... 最后目录如下
.
├── go.mod
├── main.go
└── packagea
└── hello.go
1 directory, 3 files
go.mod
module testxxx
go 1.14
hello.go
package hhh
var Name string = "张三"
main.go
package main
import "fmt"
import "testxxx/packagea" // 正确
// import "packagea" package packagea is not in GOROOT (/usr/lib/go/src/packagea)
func main() {
fmt.Println("hello world!")
fmt.Println(hhh.Name)
}
我们得到信息:
- package名不一定和目录一致,不一致的时候,写实际的package名
- mod模式,导入相对模块,需要加上当前module名的前缀为开始。
其它注意点:
-
go run xxx.go: 如果xxx.go文件包名是main,那么你引入相同包名的其它文件(xxx2.go)的变量,那么会无法找到该变量。使用
go run .
或者go run xxx.go xxx2.go
。如果你的代码引入了是不同包名的,那么go run xxx.go
还是正常的。 -
不允许子包导入main包
网友评论