当前位置: 首页 > 面试题库 >

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

薛欣德
2023-03-14
问题内容

我正在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的作者不想限制您的名字,因此他们只是重命名了所有内容。

奇怪的是,文档暗示生成的代码将使用您的姓名。如果您的名字可行的话,这样做就很好了。



 类似资料:
  • 问题内容: 有没有一种简单的方法可以进入python函数并获取参数名称列表? 例如: 谢谢 问题答案: 好吧,我们实际上不需要这里。 对于Python 2.5及更高版本,请使用代替和代替。

  • 问题内容: 我想做这样的事情: 并得到返回: 问题答案: 您不能那样做(正如Ignacio Vazquez-Abrams已经回答的那样),但是您可以通过类似的方式来做: 唯一的区别是您必须使用关键字参数,否则它将不起作用。 另一种解决方案是访问 传递的变量的属性,这将导致获得函数,类或名称的名称(或其他将定义此名称的名称)。您唯一应该知道的是,默认情况下,它不是变量的名称,而是函数/类/模块的原始

  • 问题内容: 给定一个函数,可以得到它的名字吗?说: 有人告诉我runtime.FuncForPC会有所帮助,但我不明白如何使用它。 问题答案: 很抱歉回答我自己的问题,但我找到了解决方案:

  • 问题内容: 说我以某种方式从另一个类获得了对象引用: 现在,我可以获取该对象的类: 现在,我可以获得该类的所有构造函数: 现在,我可以循环每个构造函数: 这已经为我很好地总结了构造函数,例如,构造函数public Test(String paramName)显示为public Test(java.lang.String) 但是,我不想获取类的类型,而是要获取参数的名称。在这种情况下,为“ para

  • 问题内容: 我有用于在Java中创建线程的此类 控制台显示以下文本作为输出 我的代码创建了新线程: 我的问题是:为什么返回正确的线程名却返回另一个? 问题答案: 为什么要返回正确的线程名称而又返回其他? 您的课程,但随后您通过调用以下内容开始: 这是不正确的。这意味着创建的线程实际是 不 一样的。 应该实现而 不是 扩展线程。您的代码可以工作,因为线程也是可运行的。 因为有两个线程对象,所以当您调

  • 本文向大家介绍Python如何获取函数名称?,包括了Python如何获取函数名称?的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将学习如何在Python中获取函数名称。获得任何函数的名称都是一件简单的事情。对于Python2和Python3,我们有两种不同的方式。让我们看看他们两个。 Python2 Python2中的每个函数都有一个名为func_name的属性,该属性为您提供当前函数