Go (也称为 Golang) 是一种开源的静态类型编程语言。它最初由 Google 开发。Go 的一些显著特点包括简单、高性能、可读性和高效。
与其他优秀的编程语言一样,Go 的标准库提供了丰富的包。然而,我们也可以通过引入第三方包来扩展其功能。本指南将 演示如何导入包并将其整合到您的 Go 项目中。
前提条件
要学习本指南,您需要准备好以下组件:
- 一台配置妥当的 Ubuntu 服务器。了解更多关于 在 CloudSigma 上配置您自己的 Ubuntu 服务器.
- Go 编程环境。您可以使用这篇关于 在 Ubuntu 上安装 Go.
- 一个现代文本编辑器,例如 Vim, Sublime Text, Atom, Visual Studio Code, Brackets 等。本指南将使用 Visual Studio Code .
步骤 1 – 安装 Go
我们已经讨论过安装核心 Go 编程语言在 Ubuntu 20.04 上。然而,还有一个更简单的替代方法: g (一个轻量级的 Go 版本管理器).
我们之所以要使用 g 是因为 Ubuntu 的包仓库或 snap 中提供的 Go 版本都不是最新的可用 Go 版本 (v1.18 在撰写本指南时)。始终建议使用任何编程语言包的最新可用版本。
以下命令将运行 g 安装脚本:
|
1 |
wget -qO- https://git.io/g-install | sh -s |


要使更改生效,您必须重新启动 shell 会话。重新启动后,验证安装:
|
1 |
go version |
|
1 |
which go |

安装 Go 之后,还建议安装 gopls 。它是官方的 Go 语言服务器。它与许多文本编辑器兼容,如 VS Code、Vim、Emacs、Sublime Text、Atom 等。运行以下命令:
|
1 |
go install golang.org/x/tools/gopls@latest |
我们的 Go 编程环境现在已经准备就绪。
步骤 2 – 创建示例 Go 脚本
本指南中演示的所有代码都将放在一个 Go 脚本中。创建一个示例 Go 脚本:
|
1 |
touch practice.go |
对脚本进行更改后,我们可以使用以下 Go 命令运行它:
|
1 |
go run practice.go |
在这里,Go 编译器将以解释器模式运行代码。
步骤 3 – 使用标准库包
Go 的标准库中包含大量的集合。它由许多包组成,例如:
要在 Go 项目中引入任何包,必须使用 import 语句来实现。该语句由 import 关键字以及包的名称来声明。例如,要导入 math/rand ,导入语句将如下所示:
|
1 |
import "math/rand" |
以下代码实现了来自 math/rand 包的各种函数:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package main import "math/rand" func main() { for i := 0; i < 10; i++ { println(rand.Intn(25)) } } |
此代码演示了一个简单的 for 循环,它在屏幕上打印 10 个随机整数(0 到 24)。这里:
- rand.Int() : 此函数调用返回一个随机整数。
- rand.Intn() : 作用类似于 rand.Int() 但接受一个参数,该参数定义了随机整数的范围(从 0 到指定的数字)。
接下来,运行代码:
|
1 |
go run practice.go |
输出将如下所示:

请注意,输出将完全相同,因为默认情况下随机数生成器的种子是一个固定值。这就是 伪随机数生成器的特性. 您可以在这里了解更多关于 随机种子的信息.
Step 4 – 导入多个包
更大、更复杂的项目需要引入多个包。如何将它们导入到您的 Go 代码中?一种可行的方法是为每个导入的包使用单独的 import 语句。然而,与以下导入结构相比,这种方法的效率较低:
|
1 2 3 4 5 6 7 8 9 |
import ( "<package_1>" "<package_2>" "<package_3>" ) |
在这里,单个 import 语句同时引入了多个包。这减少了需要编写的代码量,同时提高了可读性。
以下代码将这一特性付诸实践:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package main import ( "fmt" "math/rand" ) func main() { for i := 0; i < 10; i++ { fmt.Printf("%d) %d\n", i, rand.Intn(25)) } } |
运行代码:
|
1 |
go run practice.go |
输出结果将类似于:

Step 5 – 安装其他 Go 库
Go 的标准库附带了许多有用的包。这些包在设计上是通用的。它使开发人员能够在标准库的基础上创建自己的包,以满足他们的特定需求。请查看官方的 Go 包数据库.
如果您需要实现第三方 Go 包该怎么办?Go 附带了 go install 命令( go get 已被弃用)。它可以从互联网上获取任何第三方 Go 包。
为了进行演示,我们将安装 cobra-cli 包。以下 Go 命令将下载并安装所需的文件,并将该包集成到 Go 库系统中:
|
1 |
go install github.com/spf13/cobra-cli@latest |

二进制文件 cobra-cli 应该位于以下位置:
|
1 |
ls -l $GOPATH/bin |

其他包文件应该位于以下位置:
|
1 |
ls -l $GOPATH/pkg/mod/github.com/spf13 |

从 Go v1.11 开始,Go 模块定义了您希望导入的包的版本。这里有详细解释: Go Modules GitHub.
Step 6 – 包别名
在各种情况下,您可能会发现本地包和导入包之间存在命名冲突。这就是别名可以解决冲突的地方。别名结构类似于:
|
1 |
import <alias> "import_package_name" |
让我们修改简单的 Go 程序,以引入 fmt_alias 作为包的别名 fmt :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package main import ( fmt_alias "fmt" "math/rand" ) func main() { for i := 0; i < 10; i++ { fmt_alias.Printf("%d) %d\n", i, rand.Intn(25)) } } |
请注意,我们没有使用 fmt.Printf() ,而是使用了包别名 fmt_alias.Printf() .
然而,Go 并不那么欢迎别名。当您使用别名来避免导入名称冲突时,建议为最本地或特定于项目的导入设置别名。例如,如果您既想要一个本地包 strings 又想要一个系统包 strings ,那么您应该为本地包设置别名,而不是系统包。
最佳实践是首先避免命名冲突。
Step 7 – 导入格式化
我们学习了使用单个 import 语句。如果您有多个导入该怎么办?例如:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import ( "fmt" "os" "github.com/example/foo" "github.com/example/bar" "math/rand" "github.com/abc/pqr/xyz" ) |
导入格式化将包按特定顺序排序,从而提高了代码的一致性。由于它仅对导入的顺序进行排序,因此还可以防止随机提交。它还能避免不必要的代码变动和令人困惑的代码审查。
大多数现代编辑器都会自动为您格式化导入。或者,它们也支持 goimports。在行业中,使用 goimports 来代替手动对导入进行排序。此外, goimports 也能反映代码中的样式变化。
以下是 import 块在应用 goimports 之后可能的样子: :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import ( fmt_alias "fmt" "math/rand" "os" "github.com/example/foo" "github.com/example/bar" "github.com/abc/pqr/xyz" ) |
注意到什么规律了吗?
- 所有标准库都首先分组在一起。
- 各组之间用空行隔开,从而提高了代码的可读性。
结语
Go 中的导入(Imports)是一个强大的功能,它允许调用非 Go 内置的函数。虽然标准库提供了许多通用包,但 Go 也支持第三方包。本指南演示了如何导入内置和第三方的 Go 包。
在本指南中,我们使用解释器运行了 Go 程序。然而,为了获得更好的性能,您可以将代码编译为独立的二进制文件。您可以点击此处了解更多关于编译 Go 程序的信息。如果您想了解如何使用 Nginx 部署 Go Web 应用程序,请查看本教程。此外,您还可以查看我们展示如何编写自己的 Go 包的指南.
您是 Go 开发者吗?CloudSigma 提供 Go API 支持,以便与您的项目无缝集成。
祝您计算愉快!
评论
暂无评论。发表第一条评论吧。