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 支持,以便与您的项目无缝集成。
祝您计算愉快!

Comments
No comments yet. Be the first.