Go 嵌套的包目录和导入路径

12 min read

Go 语言中的包可以被嵌套在其他包中,这样就可以形成一种包目录的结构。例如,有一个名为 "mypackage" 的包,它可以包含在另一个名为 "myparentpackage" 的包中,这样就形成了如下的目录结构:

myparentpackage/
├── myparentpackage.go
└── mypackage
    ├── mypackage.go
    ├── myfile1.go
    └── myfile2.go

其中,"mypackage" 目录中的三个文件都属于 "mypackage" 包,而 "myparentpackage.go" 文件属于 "myparentpackage" 包。

在导入时,可以使用相对导入路径或绝对导入路径。相对导入路径就是从当前包所在的目录开始的相对路径,例如在 "myparentpackage.go" 文件中导入 "mypackage" 包可以使用以下任意一种导入路径:

import (
    "./mypackage"
    "../myparentpackage/mypackage"
)

绝对导入路径则以 GOPATH 和 /src 作为起始点,例如 "mypackage" 包可以使用以下导入路径:

import "myusername/mypackage"

其中,myusername 是 GOPATH 的一部分,即 $GOPATH/src/myusername/mypackage。

如果嵌套的包的名字与父包的名字相同,可以使用别名来导入,例如在 "myparentpackage.go" 文件中可以使用以下导入语句:

import (
    mypkg "./mypackage"
)

这样可以避免包名冲突。