在GOPATH下面的src文件夹下创建一个myapp文件夹,创建一个文件Sqrt.go
package myapp func Sqrt(x float64) float64 { z := 0.0 for i := 0; i < 1000; i++ { z -= (z*z - x) / (2 * x) } return z }
一般package的名称和目录名保持一致.
cmd进入myapp执行go install,然后执行go install mymath,会发现在pkg文件夹下面会生成一个myapp.a的文件(如果命令遇到问题可以检查下自己GOPAT还有GOROOT是否配载正确)
调用myapp下面的Sqrt:
创建应用包mathapp,在应用包下面创建main.go文件,代码如下
package main import ( "myapp" "fmt" ) func main() { fmt.Printf("Hello, world. Sqrt(2) = %v\n", mymath.Sqrt(2)) }
这个的package是main
,import里面调用的包是myapp
,这个就是相对于$GOPATH/src
的路径,如果是多级目录,就在import里面引入多级目录,如果你有多个GOPATH,也是一样,Go会自动在多个$GOPATH/src
中寻找。
编译:进入mathapp目录输入go build ,会在mathapp下面增加一个可执行文件mathapp
安装:进入mathapp目录输入go install 然后运行mathapp
输入
Hello, world. Sqrt(2) = 1.414213562373095
(这里可能会遇到问题,显示go:cannot find main module:see 'go help modules',出现这个问题是因为之前我设置过set GO111MODULE=on,使得go默认管理依赖的方式变成了go module模式,既依赖go.mod文件,而目录中没有go.mod文件所以go无法编译
GO111MODULE = on 在1.11&1.12版本不管在GOPATH 中还是外,都强制使用go.mod 1.13版本不管在GOPATH 中还是外,都强制使用go.mod
GO111MODULE = off 在1.11&1.12版本强制 Go 表现出 GOPATH 方式,即使在 GOPATH 之外 1.13版本强制 Go 表现出 GOPATH 方式,即使在 GOPATH 之外
GO111MODULE = auto 在1.11&1.12版本在GOPATH外时,GO111MODULE = on,在GOPATH内时,GO111MODULE = off 1.13版本当有go.mod或者在GOPATH 之外,GO111MODULE = on,当处于 GOPATH 内且没有 go.mod 文件时,GO111MODULE = off
)