go编译安装一个可执行运用(windows系统)

在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
", 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


原文地址:https://www.cnblogs.com/zdzdbk/p/14581712.html