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

时间:2015-05-26 10:10:28

标签: go

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

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后,在stringutil.a下创建pkg(如上所述)。

我的问题是,我可以在没有go install来源的情况下再次运行stringutil.go,因为我已经stringutil.a了吗?

我是Java程序员,也是Go的新手。通常在Java中,在编译期间,我们可以将编译后的jar文件导入到类路径中并进行编译。

我怎样才能在Go中做同样的事情?如果我有一个已编译的软件包stringutil.a,我如何将此文件分发给某人并让他们使用它而不暴露原始源代码?

1 个答案:

答案 0 :(得分:3)

您将已编译的软件包放入错误的文件夹中。

Go工作区的pkg文件夹包含基于编译到的目标体系结构组织到子文件夹中的已编译包对象,例如linux_amd64windows_amd64。在其中包含父包的路径,并且直接父文件夹是放置编译的包对象的位置。

检查go install放置包对象的位置,并镜像该文件夹结构。

因此,例如,如果您的包是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

此页面提供了更多详细信息:How to Write Go Code

备注:

通过执行此操作,您将限制编译应用程序的可能目标,因为已编译的包对象仅适用于特定平台。在Go中分发包的首选方式是源代码形式。