如何在cgo导出的函数中获取正确的参数名称?

内森·F:

我正在Go中编写一个库,我想将其导出到C共享库。它工作得很好,但是我觉得有点讨厌导出的标题上使用p0p1p2...为参数的名称,而不是从转到原来的参数名称。有没有办法改变这种行为,还是我只是坚持下去?

我在用 go version go1.12.7 darwin/amd64

例:

package main

/*
#import <stdlib.h>
*/
import "C"
import (
    "fmt"
)

func main() {}

//export MyFunc
func MyFunc(input *C.char) {
    fmt.Println(C.GoString(input));
}
go build -o libout.so -buildmode=c-shared

输出:

extern void MyFunc(char* p0);

为什么不p0命名input

根据此cgo文档,我应该获取变量名。

它指出

Go函数可以通过以下方式导出以供C代码使用:

//export MyFunction
func MyFunction(arg1, arg2 int, arg3 string) int64 {...}

//export MyFunction2
func MyFunction2(arg1, arg2 int, arg3 string) (int64, *C.char) {...}

它们将以C代码形式提供:

extern int64 MyFunction(int arg1, int arg2, GoString arg3);
extern struct MyFunction2_return MyFunction2(int arg1, int arg2, GoString arg3);

但是,当我编译它给出的确切代码时,会得到以下结果:

extern GoInt64 MyFunction(GoInt p0, GoInt p1, GoString p2);
extern struct MyFunction2_return MyFunction2(GoInt p0, GoInt p1, GoString p2);

为什么参数没有名称?

星期二:

Go允许使用任意符文名称,例如,而不是input您可以调用变量πC不允许这样的名称。大概是cgo作者不想限制您的名字,因此他们只是重命名了所有内容。

奇怪的是,文档暗示生成的代码将使用您的姓名。如果您这样做的话,那么做到这一点将是很好的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在PHP的函数中获取函数名称?

如何在装饰器中获取参数名称

如何在CLI中获取AWS Lambda函数名称?

如何在Go中获取函数名称?

如何在没有参数名称的情况下快速获取函数的参数值?

如何在严格模式下获取函数名称[正确方式]

如何在XCode中记录参数标签而不是Swift函数的参数名称?

如何在TypeScript中为函数参数设置参数名称和类型?

在 R 中的函数中获取参数名称而不是值

如何在外部函数中定义内部函数的参数名称?

如何在python中获取该函数中的当前函数名称

我如何在Scala中获取lineNumber,函数名称,pkg名称?

如何获取参数名称?

如何获取对象的构造函数的参数名称(反射)?

如何使用clang LibTooling获取函数指针参数名称?

如何在另一个函数中获取“真实的”函数名称?

在python函数中获取参数名称列表

R从函数调用中获取参数名称

在TypeScript中获取函数参数名称和类型

如何在环境中以参数为名称获取函数的输出?

如何在 Kur 中将函数名称添加到 `logging.basicConfig` 的参数 `format` 中?

如何在ES6中解析函数参数名称

如何在运行时获取Java中的参数名称

如何在Delphi中获取方法参数名称数组/列表?

如何在Visual Studio Code 2019中获取位置参数名称

Angular如何在prod mod中uglify后获取组件函数名称

如何在Linux C中从库和地址获取函数名称

如何在ftrace / trace-cmd中的'}之后获取函数名称

如何在类中通过函数名称调用函数