假设有一个CGo包,其结构定义如下:
package test
...
type Test struct {
Field *C.C_Test
}
...
现在假设我从其他地方得到unsafe.Pointer了我所知道的指向C_TestC结构的信息。
我是否正确理解,有完全没有办法创造新的test.Test从实例unsafe.Pointer值,而在一个包被其他比test?
尝试使用类似&test.Test{ptr},这里ptr是unsafe.Pointer价值,未能与消息显而易见的原因,cannot use ptr (type unsafe.Pointer) as type *test._Ctype_C_Test在字段值,以及类型转换到*test._Ctype_C_Test不工作,以及因为这种类型不出口。
而且我认为,使我的其他模块使用CGo并在其中重新定义相同的C结构将不起作用,因为该程序包将具有类似client._Ctype_C_Test但test.Test需要的东西test._Ctype_C_Test,并且从类型检查器的角度来看是不同的。
背景知识:在GtkBuilder与go-gtk库一起使用时,我需要一种创建这种结构的方法。
它的GtkBuilder.GetObject(name)方法返回*GObject指针,该指针又包含unsafe.Pointer我需要以某种方式转换为gtk.GtkEntrystruct的字段。gtk.GtkEntry本身包含类型的隐式字段,该类型的隐式字段具有类型的gtk.GtkWidget显式字段*C.GtkWidget,因此我需要转换unsafe.Pointer为*C.GtkWidget,但是我不能转换,正如我在上面的简单示例中所述。
更新:这是我要强制使用的代码:https : //gist.github.com/4141343
侃侃尔雅
人到中年有点甜
相关分类