package和文件夹的关系

来源:5-4 目录的整理

拧壶冲

2020-08-21

在看到「5-4目录的整理」,同一个package放到一个目录中,但是package只有最后一个main的package name(在basic下)。container下也有一个main。这个结构我能理解。但是对于package的命名感觉有一些疑惑。 问题是:

  1. 是不是文件的路径(包括basic和container文件夹)也当做了package的一部分?这样其他代码引用basic的时候,才能通过整个相对路径找到需要使用的package
  2. 比如一些语言java,C#, ruby,的namespace或者package 都是支持很长的字符串用“.”操作符连接起来,每一段就相当于逻辑或者物理的文件夹,go语言中就是用文件夹来当做每段namespace使用的,这样理解是否正确?
  3. 关于目录整理后的引用,比如我们basic下面有一个printer.go,也是在main下, container下面有一个builder.go,也在main下
package main
import (
	"fmt"
)
func PrintString(str) {
	fmt.Println(str)
}
package main
import (
	"fmt"
)
func BuildBasicContainer(name) {
	...
}

这个时候假设我们项目使用了mod, 我们的mod命名是 github.com/ccmouse, 我们在项目中引用就是

......
import (
	"github.com/ccmouse/basic"
	"github.com/ccmouse/container"
)
func main() {
	basic.PrintString('hello world')
	container.BuildBasicContainer('my container')
}

这样理解的mod下的目录以及引用是正确的吗?

写回答

1回答

ccmouse

2020-08-25

包的全名=<go mod里的module名字>+相对go.mod的路径+<该路径下文件中第一行申明的package名字>。
所以go要求同一文件夹下所有的文件package名字都一样

0
2
ccmouse
回复
慕慕7355481
按照提问的描述,的确应该是这样。
2021-05-07
共2条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程