导入包

你可以使用以下语句导入单个包:

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.gofile2.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 导入全局命名空间,并允许你直接调用 PrintfPlayground

如果导入包但不使用任何导出的名称,Go 编译器将打印错误消息。为了避免这种情况,你可以将别名设置为下划线:

import (
    _ "fmt"
)

如果你不直接访问此软件包但需要运行 init 函数,这将非常有用。

注意:

由于程序包名称基于文件夹结构,因此文件夹名称和导入引用中的任何更改(包括区分大小写)都会导致 Linux 和 OS-X 中的编译时错误不区分大小写的导入冲突,这很难跟踪并修复(错误消息对凡人来说有点神秘,因为它试图传达相反的情况 - 由于区分大小写,比较失败)。

例如:“path / to / Package1”vs“path / to / package1”

实例: https//github.com/akamai-open/AkamaiOPEN-edgegrid-golang/issues/2