【发布时间】:2015-09-18 18:15:24
【问题描述】:
在线文档与我在程序中访问 GO 代码中的 C 结构时看到的行为之间存在脱节。 go version 说我正在使用:
go version go1.4.2 linux/amd64
在 Go 文件中,作为 Go 关键字的 C 的 struct 字段名称可以是 通过在它们前面加上下划线来访问:如果 x 指向一个 C 结构 一个名为“type”的字段,x._type 访问该字段。不能的 C 结构字段 在 Go 中表示的,例如位域或未对齐的数据,在 Go struct,替换为适当的填充以到达下一个字段或末尾 结构。
我遇到了麻烦,所以制作了一个快速示例程序来测试它:
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 中分配了实例,是这样吗??
感谢您的帮助!
【问题讨论】:
-
i不是关键字,因此您不需要_。