我试图将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
请帮我解决这个问题
发布于 2019-12-24 15:50:08
根据go docs https://golang.org/cmd/cgo/的说法
"Cgo将C类型转换为等效的未导出的Go类型。因为翻译是未导出的,所以Go包不应该在其导出的接口中暴露C类型:一个Go包中使用的C类型与另一个Go包中使用的C类型不同。“
与此相关的github问题可以在这里找到:https://github.com/golang/go/issues/13467
到目前为止,建议不要在导出的中公开C类型
https://stackoverflow.com/questions/59464147
复制相似问题