我遇到了在线文档与我在访问 GO 代码中的 C 结构的程序中看到的行为之间的脱节。go version说我正在使用:go version go1.4.2 linux/amd64根据GO CGO 文档:在 Go 文件中,作为 Go 中关键字的 C 的结构字段名称可以通过以下划线作为前缀来访问:如果 x 指向具有名为“type”的字段的 C 结构,则 x._type 访问该字段。无法在 Go 中表达的 C 结构字段,例如位字段或未对齐的数据,在 Go 结构中被省略,替换为适当的填充以到达下一个字段或结构的末尾。我遇到了这个问题,所以做了一个快速的示例程序来测试它:package main// struct rec// {// int i;// double d;// char* s;// };import "C"import "fmt"func main() { s := "hello world" r := C.struct_rec{} r.i = 9 r.d = 9.876 r.s = C.CString(s) fmt.Printf("\n\tr.i: %d\n\tr.d: %f\n\tr.s: %s\n", r.i, r.d, C.GoString(r.s))}当我使用下划线作为文档显示(例如,替代r._i了r.i以上)我得到以下编译错误:r._i undefined (type C.struct_rec has no field or method _i)当我不使用下划线时,它工作正常。我用指针和非指针都试过这个。我能想到的唯一另一个想法是,也许是因为我在 GO 而不是 C 中分配了实例,是这样吗??谢谢你的帮助!
- 1 回答
- 0 关注
- 174 浏览
添加回答
举报
0/150
提交
取消