下面是一个简单的demo演示Go package和Go command。标准的方法用于读取,构建,和安装Go包和命令行(fetch, build, and install Go packages and commands) 。
-
go设计的目标是更容易写软件。它使用源码找寻依赖和构建条件。意味着你的源码和构建脚本总是同步进行,而且是同一个。
-
你必须设置一个GOPATH环境变量。GOPATH 告诉go命令行到那里查找和安装go包。例如,GOPATH = C:\mygo ,它指定了本地的工作空间,一个工作空间包括了 go源文件、相关联的包对象和可执行命令。工作空间规定包含3个子文件夹:
src , 包含Go源文件。
pkg ,包含已编译的包对象。
bin ,包含可执行命令。
C:\mygo下创建文件夹src, pkg, bin。
环境变量设置 GOPATH (GOPATH = C:\mygo ) 和 path (其中path设置如下 %GOPATH%\bin)。
-
src文件夹下面创建src/example/newmath/sqrt.go 源文件,源码如下
-
// Package newmath is a trivial example package.
package newmath
// Sqrt returns an approximation to the square root of x.
func Sqrt(x float64) float64 {
// This is a terrible implementation.
// Real code should import "math" and use math.Sqrt.
z := 0.0
for i:=0; i<1000; i++ {
z -= (z*z - x) / (2 * x)
}
return z
}
-
构建和安装
-
构建一个包
执行命令: go install example\newmath
windows下执行结果:
C:\mygo\pkg\windows_386\example\newmath.a # 包对象
C:\mygo\src\example\newmath\sqrt.go # 包源
-
构建一个命令
go 命令视代码包含 package main 作为一个可执行命令和二进制安装包放入到GOPATH的bin目录下。创建一个 example\hello\hello.go 源文件,go代码:
//Hello is a trivial example of a main package.
package main
import (
"example/newmath"
"fmt"
)func main () {
fmt.Printf("Hello , world. Sqrt(2) = %v\n", newmath.Sqrt(2))
}执行命令: go install example\hello
windows下执行结果:
C:\mygo\bin\hello.exe
-
测试
Go有一个轻量测试框架,$GOPATH\src\example\newmath\sqrt_test.go 源文件,包含go代码:
package newmath
import "testing"
func TestSqrt(t *testing.T) {
const in , out = 4, 2
if x := Sqrt(in); x != out {
t.Errorf("Sqrt(%v) = %v, want %v", in, x, out)
}
}执行命令: go test example\newmath
结果: ok example/newmath 0.081s
-