Go 仅二进制库不包括依赖项

Go 仅二进制库不包括依赖项,go,Go,我试图构建一个只包含一些依赖项的二进制库。仅二进制库本身的构建非常成功,但它实际上并不包括我的依赖项:当我试图在没有安装依赖项的系统上使用该库时,我会收到一个错误,说它们丢失了 作为参考,我用于构建库的命令是: go build-o build/pkg/.a 然后我将存根.go文件写入build/src/.go 存根文件包含所有公共方法的存根实现和其依赖项的import块,每个依赖项都包含在该导入块中 存根文件在package指令上方还有//go:binary-only-package行 如果有

我试图构建一个只包含一些依赖项的二进制库。仅二进制库本身的构建非常成功,但它实际上并不包括我的依赖项:当我试图在没有安装依赖项的系统上使用该库时,我会收到一个错误,说它们丢失了

作为参考,我用于构建库的命令是:

go build-o build/pkg/.a

然后我将存根
.go
文件写入
build/src/.go

存根文件包含所有公共方法的存根实现和其依赖项的
import
块,每个依赖项都包含在该导入块中

存根文件在
package
指令上方还有
//go:binary-only-package


如果有一种方法可以构建一个包含依赖项的二进制库,我将不胜感激

正如您所知,go将包编译成单独的归档文件,并从中创建二进制文件。Go最近允许您只提供没有源代码的存档(如果源代码较新,通常Go将从源代码重新编译)

可以将多个存档合并为一个,如下所述:


问题是go的编译器将使用与包名匹配的文件夹和文件结构查找符号。因此,如果合并存档,go编译器将无法在构建二进制文件时定位符号。根据存档的位置,只有一个包是可定位的。因此,至少在当前的go编译器支持下,不可能完成您的请求。

我认为您只能将所需的导入语句添加到二进制文件中stub@JimB:是,我已在存根文件中设置了所需的导入语句。为了清晰起见,编辑问题是有意义的。谢谢你的解释!如果他们最终决定支持您的请求(不确定如何支持),我不会感到惊讶,需要有某种方式来打包库,就像java的“jar”文件或C/C++的组合单一存档一样,这样您就可以轻松地交付库,而无需进一步的步骤。仅构建库功能是新的,因此可能很快就会出现。你可以考虑在Guthub上与戈朗人展开一个问题。