【问题标题】:How to use/distribute a binary package without Go source code如何在没有 Go 源代码的情况下使用/分发二进制包
【发布时间】:2015-05-26 10:10:27
【问题描述】:

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

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下创建(如上)。

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

我是一名 Java 程序员,并且是 Go 新手。通常在Java中,在编译的时候,我们可以将编译好的jar文件导入到classpath中进行编译。

如何在 Go 中做同样的事情?如果我有一个编译好的包,stringutil.a,我怎么能把这个文件分发给别人,让他们在不暴露原始源代码的情况下使用它?

【问题讨论】:

标签: go


【解决方案1】:

你把编译好的包放错了文件夹。

Go 工作区的 pkg 文件夹包含已编译的包对象,这些已编译的包对象根据它们编译到的目标架构组织到子文件夹中,例如 linux_amd64 或 windows_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 中分发包的首选方式是源代码形式。

【讨论】:

    猜你喜欢
    • 2018-01-09
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    相关资源
    最近更新 更多