为了账号安全,请及时绑定邮箱和手机立即绑定

来自 Go 的 cgo C 结构字段访问:下划线还是无下划线?

来自 Go 的 cgo C 结构字段访问:下划线还是无下划线?

Go
收到一只叮咚 2021-10-18 16:18:24
我遇到了在线文档与我在访问 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 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

答案就在您在问题中的引用中:

在转到文件,C的结构字段名关键字,在Go可以通过用下划线前缀来访问(...)

id, ands不是 Go 中的关键字。


查看完整回答
反对 回复 2021-10-18
  • 1 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信