Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
80 lines (60 sloc) 2.23 KB

设计你的Go packages

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

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

aPackage.go 的第一部分如下:

package aPackage

import (
    "fmt"
)

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

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

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

const MyConstant = 123
const privateConstant = 21

如您所见,开发一个新包是相当简单的!现在您不能单独使用这个包,需要创建一个名为 mainmain() 函数的包来创建执行文件。这里,使用 aPackage 的程序名是 useAPackage.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)

还有一件事需要处理,正如在 第一章——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
You can’t perform that action at this time.