此处有个一注意点。每个pkg必须是文件夹+其对应的go文件组成。假设要生成math的Average函数;代码如下:
点击(此处)折叠或打开
- package math
- func Average(xs []float64) float64 {
- total := float64(0)
- for _, x := range xs {
- total += x
- }
- return total / float64(len(xs))
- }
保存完毕后,可以在math目录下运行go install,则系统会自动生成math.a文件,存放在~/mypackage/pkg/$ GOOS_GOARCH/pjname/math.a;
如果没有pjname目录,而直接生成math目录,install 会报错l go install: no install location for directory /home/test/gogo/src/math outside GOPATH; 报此错是因为math是系统自带的package,用在这里冲突了。把math改为mymath就可以了;
下面写个小例子展示一下package name,import name,这两句话中的name分别对应什么?
- 当前目录是/home/test/gogo/src,设置GOPATH=/home/test/gogo
- find ./列出目录结构;
- ./
./mymath
./mymath/math.go
./mymain
./mymain/hello.go - 下面列出代码math.go
点击(此处)折叠或打开
- package math
- func Average(i,j int)int{
- return (i+j)>>2
- }
- package math
- 这里列出hello.go
点击(此处)折叠或打开
- package main
- import "mymath"
- func main(){
- print("hello world\n",math.Average(8,12));
- }
- package main
- 注意上面的代码,math.go 存放在mymath目录中,所以生成的package,import时写mymath;
- 不过在math.go中的package写的package math;,在hello.go的地4行使用时仍旧写math.Average;
- 所以import的是.a的文件名;
- 使用时该程序中的package定义的名字;
- 小例子只是说明对应关系,自己定义package时还是保持稳健名一致比较好了.否则其他人看代码时都不知道引用的那个文件中的了.