Go从入门到精通——使用包实现代码重用
使用包实现代码重用
本章介绍如下内容。
- 导入包。
- 使用第三方包。
- 安装第三方包。
- 管理第三方依赖。
- 创建包。
在 Go 语言中,包用于将代码编组,以便在 Go 程序中导入并使用它们。
1.1 导入包
为方便理解如何导入并使用包,先来个简单的程序。
package main import { "fmt" } func main(){ fmt.Println("Hello World") }
Go 程序以 package 语句打头。main 包是一种特殊的包,其特殊之处在于不能导入。对 main 包的唯一要求是,必须声明一个 main 函数,这个函数不接受任何参数且不返回任何值。简而言之,main 包是程序的入口。
在 main 包中,可使用 import 声明来导入其他包。导入包后,就可使用其中被导出的标识符。
在 Go 语言中,标识符可以是变量、常量、类型、函数或方法。
这让包能够通过接口提供各种功能。
举个函数导出的例子,strings 包导出了函数 ToLower,可用于将字符串转换为小写。
package main import { "fmt" } func main(){ fmt.Println(string.ToLower("STOP SHOUTING!")) }
导入包并使用其中导出的标识符,是重用标准库和其他第三方代码的基本方式。
这种方式虽然简单,但是灵活性和代码重用在很大程度上都是通过这种方式实现的。
1.2 使用第三方包
标准库提供了很多功能,但 Go 语言的设计理念是确保标准库小巧而稳定,因此标准库没有提供连接到数据库、分析文件格式以及实现身份验证协议的功能。不用多久,标准库就无法满足编写程序的需求了。在这种情况下,程序员有2种选择:
- 自己编写解决问题的代码。
- 寻找能够解决问题的包(或库代码)。
大部分程序员很可能会选择第二种做法。然而,在程序中添加额外的依赖要三思而行,因为这可能影响程序的稳定性和可维护性。考虑使用第三方库时,您应该自问如下几个问题:
- 我明白了这些代码是做什么的吗?
- 这些代码值得信任吗?
- 这些代码的维护情况如何?
- 我真的需要这个库吗?
回答这些问题时,请考虑如下几点:
- 明白包的作用至关重要。优秀的第三方包都有卓越的文档,这些文档通常遵循 Go 语言文档约定,指出了它们导出了哪些标识符。通过阅读文档,可确定包是否提供了你所需的功能。
- 确定第三方包值得信任很重要。
- 考虑到软件的特征,第三方包不可避免地存在 Bug。不要选择几年都没有更新的包,而应选择开发积极维护的第三方包,因为这意味着随着时间的推移,这样的包会越来越稳定。
- 导入第三方包会增加程序的复杂性。很多时候导入一个包只为了使用其中一个函数,在这种情况下,可复制这个函数,而不导入整个包。
1.3 安装第三方包
要使用第三方库,必须像使用标准库一样使用 import 语句导入它。
下面将使用 Go 小组开发的 stringutil 包。这是一个简单的第三方包,只有一个函数被导出——Reverse。这个函数将一个字符串作为参数,将该字符串反转并返回结果。
要使用第三方包,必须使用命令 go get 安装它:
go get github.com/golang/example/stringutil
这个包被安装到环境变量 GOPATH 指定的路径中,因此可在程序中使用它。要查看这个包的源代码,可打开目录 src 中的文件。包的安装目录如下:
// OSX and Linux $GOPATH/src/github/golang/example/stringutil //Windows %GOPATH%\src\github\glang\example\stringutil
安装这个包后,就可以导入它了。