首页 > 解决方案 > 使用 Golang 包对象(.a 文件)

问题描述

我正在尝试了解软件包的 go install 命令。我使用 go install 命令安装我的包,我想尝试使用它。假设原始包有目录“github.com/abc/greeting”所以我们可以调用该方法

package main

import "github.com/abc/greeting"

func main() {
    greeting.Greet()
}

当我对问候包使用“go install”时,它会在“$GOPATH/pkg/$ARCH/github.com/abc”目录中创建一个“greeting.a”。

如何在我的代码中使用这个编译的包对象?

标签: go

解决方案


如何在我的代码中使用这个编译的包对象?

正如@JimB 的回答,不,你不能做那样的事情。但是,您可以使用go plugin API来实现类似的结果。

在 go plugin 中,该包将被编译为带有扩展名的所谓插件文件。.so然后从主包中,您可以打开特定插件并查找功能。例子:

p, err := plugin.Open("greeting.so")
if err != nil {
    panic(err)
}
greetFunc, err := p.Lookup("Greet")
if err != nil {
    panic(err)
}

greetFunc.(func())() // call the Greet function

另外仅供参考,go 有一个叫做Binary-only package 的东西,但是似乎 API 很快就会被删除https://github.com/golang/go/issues/28152


推荐阅读