导入包
你可以使用以下语句导入单个包:
import "path/to/package"
或将多个导入组合在一起:
import (
"path/to/package1"
"path/to/package2"
)
这将在 $GOPATH
中的 .go
文件中查找相应的 import
路径,并允许你通过 packagename.AnyExportedName
访问导出的名称。
你还可以通过使用 ./
预先包装来访问当前文件夹中的本地包。在具有以下结构的项目中:
project
├── src
│ ├── package1
│ │ └── file1.go
│ └── package2
│ └── file2.go
└── main.go
你可以在 main.go
中调用它来导入 file1.go
和 file2.go
中的代码:
import (
"./src/package1"
"./src/package2"
)
由于包名称可能会在不同的库中发生冲突,因此你可能希望将一个包别名为新名称。你可以通过在 import-statement 前添加你要使用的名称来执行此操作。
import (
"fmt" //fmt from the standardlibrary
tfmt "some/thirdparty/fmt" //fmt from some other library
)
这允许你使用 fmt.*
访问以前的 fmt
包,使用 tfmt.*
访问后一个 fmt
包。
你还可以将包导入到自己的命名空间中,这样你就可以使用单个点作为别名来引用不带 package.
前缀的导出名称:
import (
. "fmt"
)
上面的示例将 fmt
导入全局命名空间,并允许你直接调用 Printf
: Playground
如果导入包但不使用任何导出的名称,Go 编译器将打印错误消息。为了避免这种情况,你可以将别名设置为下划线:
import (
_ "fmt"
)
如果你不直接访问此软件包但需要运行 init
函数,这将非常有用。
注意:
由于程序包名称基于文件夹结构,因此文件夹名称和导入引用中的任何更改(包括区分大小写)都会导致 Linux 和 OS-X 中的编译时错误不区分大小写的导入冲突,这很难跟踪并修复(错误消息对凡人来说有点神秘,因为它试图传达相反的情况 - 由于区分大小写,比较失败)。
例如:“path / to / Package1”vs“path / to / package1”
实例: https : //github.com/akamai-open/AkamaiOPEN-edgegrid-golang/issues/2