繁体   English   中英

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

[英]How to use/distribute a binary package without Go source code

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

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导入一些函数的stringutil.go

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

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

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

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

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

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

此页面提供了更多详细信息: 如何编写Go代码

笔记:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM