将C结构从主要golang代码传递给不同的golang包中的函数

时间:2019-12-24 05:21:30

标签: go cgo

我试图将C结构从主要的golang代码传递给其他程序包,并收到类型转换错误。

代码段

C头文件test.h

#include<stdio.h>
struct err_struct {
        int   errnum;
};

Golang软件包测试

package test
//#include<test.h>
import "C"
func ConvertCtoGoError(err_struct *C.struct_err_struct) {
   //some code
}

golang主要代码

package main
import (
        "./lib"
        "fmt"
       )   
/*
#include"lib/test.h"

struct err_struct initialize_structure() 
{
    struct err_struct err;
    err.errnum = 102;
    return err;

}
 */
import "C" 
func main() {
    go_struct:= C.initialize_structure()
    new_struct:= test.ConvertCtoGoError(&go_struct)

}  

在编译主要代码时,出现以下错误: 无法将&go_struct(类型* _Ctype_struct_err_struct)转换为类型* test._Ctype_struct_err_struct

当我尝试对变量进行类型转换时,出现以下错误:  无法引用未导出的名称test。_Ctype_struct_dd_err_struct  无法将&go_struct(类型* _Ctype_struct_err_struct)转换为类型* test._Ctype_struct_err_struct

请帮助我解决这个问题

1 个答案:

答案 0 :(得分:2)

根据文档https://golang.org/cmd/cgo/

  

“ Cgo将C类型转换为等效的未导出Go类型。由于未转换翻译,因此Go程序包不应在其导出的API中公开C类型:在一个Go程序包中使用的C类型不同于在C语言中使用的相同C类型。另一个。”

与此有关的github问题可以在这里找到: https://github.com/golang/go/issues/13467

到目前为止,建议不要在导出的API中公开C类型