我试图将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
请帮助我解决这个问题
答案 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类型