> For the complete documentation index, see [llms.txt](https://wskdsgcf.gitbook.io/mastering-go-zh-cn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wskdsgcf.gitbook.io/mastering-go-zh-cn/06.0/06.3.md).

# 06.3 设计你的Go packages

Go 包的源码可以包括多个文件和多个目录，可以在以包名称命名的单个目录找到，除了 `main` 包，它可以放在任意位置。

这章的目标是开发一个名为 `aPackage` 的简单 Go 包。这个包的源文件命名为 `aPackage.go`，它的源码分为两部分介绍。

`aPackage.go` 的第一部分如下：

```go
package aPackage

import (
    "fmt"
)

func A() {
    fmt.Println("This is function A!")
}
```

`aPackage.go` 的第二部分代码如下：

```go
func B() {
    fmt.Println("privateConstant:", privateConstant)
}

const MyConstant = 123
const privateConstant = 21
```

如您所见，开发一个新包是相当简单的！现在您不能单独使用这个包，需要创建一个名为 `main` 有 `main()` 函数的包来创建执行文件。这里，使用 `aPackage` 的程序名是 `useAPackage.go`，代码如下：

```go
package main

import (
    "aPackage"
    "fmt"
)

func main() {
    fmt.Println("Using aPackage!")
    aPackage.A()
    aPackage.B()
    fmt.Println(aPackage.MyConstant)
}
```

如果现在执行 `useAPackage.go`，将会得到一个错误信息，告诉您不能执行：

```
$go run useAPackage.go
useAPackage.go:4:2: cannot find package "aPackage" in any of:
    /use/local/Cellar/go/1.9.2/libexec/src/aPackage (from $GOROOT)
    /Users/mtsouk/go/src/aPackage (from $GOPATH)
```

还有一件事需要处理，正如在 [*第一章*](https://github.com/hantmac/Mastering_Go_ZH_CN/tree/master/eBook/chapter1)*——Go与操作系统* 了解到的，Go 需要从 Unix shell 执行特定命令来安装所有外部包，也包括您自己开发的。因此，您需要把之前的包放在正确的目录下并对当前 Unix 用户可用。所以安装您自己的包，需要执行如下命令：

```
$mkdir ～/go/src/aPackage
$cp aPackage.go ~/go/src/aPackage/
$go install aPackage
$cd ~/go/pkg/dawin_amd64/
$ls -l aPackage.a
-rw-r--r-- 1 mtsouk staff 4980 Dec 22 06:12 aPackage.a
```

如果 `~/go` 不存在，您需要使用 `mkdir(1)` 命令创建它。您也需要有相同的 `~/go/src` 目录。

使用 `useAPackage.go` 将产生如下输出：

```
$go run useAPackage.go
Using aPackage!
This is function A!
privateConstant: 21
123
```
