返回博客

如何在 Go 中导入包

如何在 Go 中导入包

Go (也称为 Golang) 是一种开源的静态类型编程语言。它最初由 Google 开发。Go 的一些显著特点包括简单、高性能、可读性和高效。

与其他优秀的编程语言一样,Go 的标准库提供了丰富的包。然而,我们也可以通过引入第三方包来扩展其功能。本指南将 演示如何导入包并将其整合到您的 Go 项目中。

前提条件

要学习本指南,您需要准备好以下组件:

步骤 1 – 安装 Go

我们已经讨论过安装核心 Go 编程语言在 Ubuntu 20.04 上。然而,还有一个更简单的替代方法: g  (一个轻量级的 Go 版本管理器).

我们之所以要使用 g  是因为 Ubuntu 的包仓库或 snap 中提供的 Go 版本都不是最新的可用 Go 版本 (v1.18 在撰写本指南时)。始终建议使用任何编程语言包的最新可用版本。

以下命令将运行 g  安装脚本:

Import Packages in Go install go

Import Packages in Go installing go 2

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

Import Packages in Go check go version

安装 Go 之后,还建议安装 gopls 。它是官方的 Go 语言服务器。它与许多文本编辑器兼容,如 VS Code、Vim、Emacs、Sublime Text、Atom 等。运行以下命令:

我们的 Go 编程环境现在已经准备就绪。

步骤 2 – 创建示例 Go 脚本

本指南中演示的所有代码都将放在一个 Go 脚本中。创建一个示例 Go 脚本:

对脚本进行更改后,我们可以使用以下 Go 命令运行它:

在这里,Go 编译器将以解释器模式运行代码。

步骤 3 – 使用标准库包

Go 的标准库中包含大量的集合。它由许多包组成,例如:

  • fmt: 实现了格式化 I/O,其函数类似于 C 的 ( printf  和 scanf ).
  • http: 该包提供了用于创建 Web 服务、通过 http  协议发送和检索数据等功能。

要在 Go 项目中引入任何包,必须使用 import  语句来实现。该语句由 import  关键字以及包的名称来声明。例如,要导入 math/rand ,导入语句将如下所示:

以下代码实现了来自 math/rand  包的各种函数:

此代码演示了一个简单的 for 循环,它在屏幕上打印 10 个随机整数(0 到 24)。这里:

  • rand.Int() : 此函数调用返回一个随机整数。
  • rand.Intn() : 作用类似于 rand.Int()  但接受一个参数,该参数定义了随机整数的范围(从 0 到指定的数字)。

接下来,运行代码:

输出将如下所示:

random number program

请注意,输出将完全相同,因为默认情况下随机数生成器的种子是一个固定值。这就是 伪随机数生成器的特性. 您可以在这里了解更多关于 随机种子的信息.

Step 4 – 导入多个包

更大、更复杂的项目需要引入多个包。如何将它们导入到您的 Go 代码中?一种可行的方法是为每个导入的包使用单独的 import 语句。然而,与以下导入结构相比,这种方法的效率较低:

在这里,单个 import 语句同时引入了多个包。这减少了需要编写的代码量,同时提高了可读性。

以下代码将这一特性付诸实践:

运行代码:

输出结果将类似于:

importing multiple packages

Step 5 – 安装其他 Go 库

Go 的标准库附带了许多有用的包。这些包在设计上是通用的。它使开发人员能够在标准库的基础上创建自己的包,以满足他们的特定需求。请查看官方的 Go 包数据库.

如果您需要实现第三方 Go 包该怎么办?Go 附带了 go install  命令( go get  已被弃用)。它可以从互联网上获取任何第三方 Go 包。

为了进行演示,我们将安装 cobra-cli  包。以下 Go 命令将下载并安装所需的文件,并将该包集成到 Go 库系统中:

install cobra cli

二进制文件 cobra-cli  应该位于以下位置:

list gopath files

其他包文件应该位于以下位置:

list package files

从 Go v1.11 开始,Go 模块定义了您希望导入的包的版本。这里有详细解释: Go Modules GitHub.

Step 6 – 包别名

在各种情况下,您可能会发现本地包和导入包之间存在命名冲突。这就是别名可以解决冲突的地方。别名结构类似于:

让我们修改简单的 Go 程序,以引入 fmt_alias  作为包的别名 fmt :

请注意,我们没有使用 fmt.Printf() ,而是使用了包别名 fmt_alias.Printf() .

然而,Go 并不那么欢迎别名。当您使用别名来避免导入名称冲突时,建议为最本地或特定于项目的导入设置别名。例如,如果您既想要一个本地包 strings  又想要一个系统包 strings ,那么您应该为本地包设置别名,而不是系统包。

最佳实践是首先避免命名冲突。

Step 7 – 导入格式化

我们学习了使用单个 import  语句。如果您有多个导入该怎么办?例如:

导入格式化将包按特定顺序排序,从而提高了代码的一致性。由于它仅对导入的顺序进行排序,因此还可以防止随机提交。它还能避免不必要的代码变动和令人困惑的代码审查。

大多数现代编辑器都会自动为您格式化导入。或者,它们也支持 goimports。在行业中,使用 goimports  来代替手动对导入进行排序。此外, goimports  也能反映代码中的样式变化。

以下是 import  块在应用 goimports 之后可能的样子: :

注意到什么规律了吗?

  • 所有标准库都首先分组在一起。
  • 各组之间用空行隔开,从而提高了代码的可读性。

结语

Go 中的导入(Imports)是一个强大的功能,它允许调用非 Go 内置的函数。虽然标准库提供了许多通用包,但 Go 也支持第三方包。本指南演示了如何导入内置和第三方的 Go 包。

在本指南中,我们使用解释器运行了 Go 程序。然而,为了获得更好的性能,您可以将代码编译为独立的二进制文件。您可以点击此处了解更多关于编译 Go 程序的信息。如果您想了解如何使用 Nginx 部署 Go Web 应用程序,请查看本教程。此外,您还可以查看我们展示如何编写自己的 Go 包的指南.

您是 Go 开发者吗?CloudSigma 提供 Go API 支持,以便与您的项目无缝集成。

祝您计算愉快!

author

Preslav Dobrev

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的创意设计师,专注于通过传统和创新营销渠道打造一致的企业形象。他擅长将艺术愿景与战略营销相融合,创造具有影响力的品牌叙事。

评论

暂无评论。发表第一条评论吧。