使用构建的 GO 语言依赖项
GO Language Dependencies using build
我不认为我是唯一可能对此感到困惑的人。
我有一个非常简单的 Go 程序,唯一的依赖项是。
import (
"fmt"
"time"
)
我使用了 "go build myprogram.go" ,得到了一个 运行 没问题的二进制文件(因为我已经安装了 GO)
但是,如果其他人没有安装 GO,他们似乎会出错。
例如:
open c:\go\lib\time\zoneinfo.zip: The system cannot find the path specified.
panic: time: missing Location in call to Time.In
我需要做什么才能在构建中包含第三方库?
我想生成一个可以在任何平台上 运行 而不必担心依赖关系的二进制文件
没有更完整的代码示例,很难回答具体问题,但我生成独立二进制文件的方法是:
CGO_ENABLED=0 go build -v -a -ldflags '-s -w' ./...
它至少构建了一个没有 libc 依赖项的静态二进制文件...似乎 zoneinfo.zip 依赖项不会被包含在内。
zoneinfo.zip 文件不是 Go 独有的...Go 希望它安装在系统上。这是扫描该文件的系统文件夹的代码:https://golang.org/src/time/zoneinfo_unix.go#L31
撰写本文时:
var zoneDirs = []string{
"/usr/share/zoneinfo/",
"/usr/share/lib/zoneinfo/",
"/usr/lib/locale/TZ/",
runtime.GOROOT() + "/lib/time/zoneinfo.zip",
}
我不认为我是唯一可能对此感到困惑的人。
我有一个非常简单的 Go 程序,唯一的依赖项是。
import (
"fmt"
"time"
)
我使用了 "go build myprogram.go" ,得到了一个 运行 没问题的二进制文件(因为我已经安装了 GO)
但是,如果其他人没有安装 GO,他们似乎会出错。
例如:
open c:\go\lib\time\zoneinfo.zip: The system cannot find the path specified.
panic: time: missing Location in call to Time.In
我需要做什么才能在构建中包含第三方库?
我想生成一个可以在任何平台上 运行 而不必担心依赖关系的二进制文件
没有更完整的代码示例,很难回答具体问题,但我生成独立二进制文件的方法是:
CGO_ENABLED=0 go build -v -a -ldflags '-s -w' ./...
它至少构建了一个没有 libc 依赖项的静态二进制文件...似乎 zoneinfo.zip 依赖项不会被包含在内。
zoneinfo.zip 文件不是 Go 独有的...Go 希望它安装在系统上。这是扫描该文件的系统文件夹的代码:https://golang.org/src/time/zoneinfo_unix.go#L31
撰写本文时:
var zoneDirs = []string{
"/usr/share/zoneinfo/",
"/usr/share/lib/zoneinfo/",
"/usr/lib/locale/TZ/",
runtime.GOROOT() + "/lib/time/zoneinfo.zip",
}