如何在没有Go源代码的情况下使用/分发二进制软件包

如何在没有Go源代码的情况下使用/分发二进制软件包,go,Go,基本上,我的文件夹结构如下: bin/ pkg/ linux_amd64/ github.com/user/ stringutil.a src/ github.com/user/ hello/ hello.go (main file) stringutil/ stringutil.go hello.g

基本上,我的文件夹结构如下:

bin/               
pkg/
    linux_amd64/         
        github.com/user/
            stringutil.a  
src/
    github.com/user/
        hello/
            hello.go   (main file)  
        stringutil/
            stringutil.go
hello.go
是从
stringutil.go
导入一些函数的主程序

运行
go install
后,将在
pkg
下创建
stringutil.a
(如上所述)

我的问题是,既然我已经有了
stringutil.a
,我是否可以在没有
stringutil.go
源代码的情况下再次运行
go安装

我是一名Java程序员,新手。通常在Java中,在编译过程中,我们可以将编译好的jar文件导入类路径并进行编译


我怎样才能在围棋中做同样的事情?如果我有一个编译包,
stringutil.a
,我如何将此文件分发给其他人并让他们使用,而不公开原始源代码?

您将编译包放入了错误的文件夹中

Go工作区的
pkg
文件夹包含编译包对象,这些对象根据编译到的目标体系结构组织到子文件夹中,例如
linux\u amd64
windows\u amd64
。其中,父包的路径如下,直接父文件夹是将已编译包对象放入其中的位置

检查安装包对象的位置,并镜像文件夹结构

因此,例如,如果您的包是
path/to/parent/package/abc
,并且您编译到linux 64位,则应将其编译后的包文件放入如下文件夹:

myworkspace/pkg/linux_amd64/path/to/parent/package/abc.a
或在Windows 64位的情况下:

myworkspace/pkg/windows_amd64/path/to/parent/package/abc.a
本页提供了更多详细信息:

注意事项:

通过这样做,您将限制编译应用程序的可能目标,因为编译包对象仅适用于特定平台。在Go中分发软件包的首选方式是以源代码的形式。

可能的副本