包由位于同一目录中的Go文件组成,这些文件在开头具有相同的package语句。你可以从包中包含额外的功能,使程序更复杂。有些包可以通过Go标准库获得,因此与Go安装一起安装。其他可以使用Go的go get
命令安装。您还可以通过使用必要的package语句在要共享代码的相同目录中创建Go文件来构建自己的Go包。
本教程将指导您编写用于其他编程文件中的Go包。
前期准备
- 按照[如何安装和设置Go本地编程环境]系列中的教程之一设置Go编程环境。在本地编程环境教程中按照步骤5创建您的Go工作空间。要遵循本文中的示例和命名约定,请阅读第一部分“编写和导入包”。
- 要加深您对GOPATH的了解,请阅读我们的文章Understanding the GOPATH
编写和导入包
编写包就像编写任何其他Go文件一样。包可以包含函数、[类型]和[变量]的定义,然后可以在其他Go程序中使用它们。
在我们创建新包之前,我们需要在Go工作区中。这通常在我们的gopath
下。例如,在本教程中,我们将包命名为greet
。为此,我们在项目空间的gopath
中创建了一个名为greet
的目录。如果我们的组织是gopherguides
,并且我们想在组织下创建greet
包,同时使用Github作为我们的代码仓库,那么我们的目录将如下所示:
└── $GOPATH└── src└── github.com└── gopherguides
greet
目录在gopherguides
目录中:
└── $GOPATH└── src└── github.com└── gopherguides└── greet
最后,我们可以添加目录中的第一个文件。通常的做法是包中的primary
或entry point
文件以目录的名称命名。在这种情况下,我们将在greet
目录中创建一个名为greet.go
的文件:
└── $GOPATH└── src└── github.com└── gopherguides└── greet└── greet.go
创建文件后,我们就可以开始编写希望在项目之间重用或共享的代码了。在本例中,我们将创建一个名为Hello
的函数,打印出Hello World
。
在文本编辑器中打开greet.go
文件并添加以下代码:
greet.go
package greetimport "fmt"func Hello() {fmt.Println("Hello, World!")
}
让我们分解第一个文件。每个文件的第一行都需要你所在的package
的名称。因为你在greet
包中,所以要在package
关键字后面加上包的名称:
package greet
这将告诉编译器将文件中的所有内容都视为greet
包的一部分。
接下来,你需要在import
语句中声明任何其他需要使用的包。在这个文件中,你只需要使用fmt
包:
import "fmt"
最后,创建函数Hello
。它将使用fmt
包打印Hello, World!
:
func Hello() {fmt.Println("Hello, World!")
}
现在你已经编写了greet
包,你可以在创建的任何其他包中使用它。让我们创建一个新包,在其中使用greet
包。
你将创建一个名为example
的包,这意味着你需要一个名为example
的目录。在你的gopherguides
组织中创建此包,目录结构如下所示:
└── $GOPATH└── src└── github.com└── gopherguides└── example
现在您有了新包的目录,可以创建入口点文件。因为这将是一个可执行程序,所以将入口文件命名为main.go
被认为是最佳实践:
└── $GOPATH└── src└── github.com└── gopherguides└── example└── main.go
在你的文本编辑器中,打开main.go
并添加以下代码来调用greet
包:
main.go
package mainimport "github.com/gopherguides/greet"func main(