请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

package和文件夹的关系

在看到「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下的目录以及引用是正确的吗?

正在回答 回答被采纳积分+3

1回答

ccmouse 2020-08-25 17:57:59

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

0 回复 有任何疑惑可以回复我~
  • 那按照提问的内容,应该是import (
    	"github.com/ccmouse/basic/main"
    	"github.com/ccmouse/container/main"
    )
    对吗?
    回复 有任何疑惑可以回复我~ 2021-05-06 11:32:12
  • 按照提问的描述,的确应该是这样。
    回复 有任何疑惑可以回复我~ 2021-05-07 16:56:26
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信