在研究了源代码后,我认为这是不可能的,但是否可以使用以下内容构建Go二进制文件:

import "package/from/stdlib"

func main() {
    ...
    stdlib.BuildBinary(path)
    ...
}

https://github.com/golang/go/blob/master/src/cmd/go/main.go. https://github.com/golang/go/blob/master/src/cmd/go/internal/work/build.go.

(我正在try 简化CI管道中的构建阶段)

推荐答案

不,标准库不包含编译器的(源代码)代码.该编译器的源代码可从以下位置获得:https://github.com/golang/go/tree/release-branch.go1.20/src/cmd/compile

但是,如果您有标准库,那么它应该是Go安装的一部分,它包含Go工具,为您提供交叉编译支持.所以简而言之:你所需要的就是(官方的)Go安装.如果要将源代码编译为可执行二进制文件,请将go工具作为外部命令调用.

但是请注意,即使标准库不包含编译器和链接器的代码,您也可以使用标准库来解析GO源代码.请参阅go/astgo/parser包.

Go相关问答推荐

出口上下文值密钥的安全方法?

SEARCH On Conflict Clause不考虑乐观锁定版本

Go Fiber和HTMX—HX—Trigger header被更改为HX—Trigger,这不是HTMX监听的内容

即使HTTP服务器正在使用GO和Protobuf、SQL Server启动,请求也不返回结果

如何用';贪婪原则';正确地

一次打印用户输入的字符串n次

Global Thread-local Storage 在 Go 中的可行性和最佳实践

在 Golang 中查看目录是否可写的跨平台方式?

当客户端同时是服务器时,需要什么 mTLS 证书?

设置 graphql 的最大文件上传大小(golang)

如何将 base64 编码的公钥转换为 crypto.PublicKey 或 ecdsa.PublicKey

Go:如何在将 float64 转换为 float32 时判断精度损失

访问传递给可变参数函数的通用 struct 的特定字段

使用 GO 在侧 tar 文件中提取 tar 文件的最快方法

使用 Golang 在字符串中循环重复数据

Golang计算 struct struct 中的字段数

如何使用特定的 Go 版本运行 govulncheck?

同时调用应该只获取一次数据

Go GCP 同时模拟两个服务帐户

使用 LoadLibraryA(path_to_dll) 加载 DLL 会将文件描述符 0、1 和 2 的继承句柄标志 (HANDLE_FLAG_INHERIT) 从 1 更改为 0