我遇到了在线文档与我在访问GO代码中的C结构的程序中看到的行为之间的脱节。 go version
说我正在使用:
go version go1.4.2 linux/amd64
在Go文件中,作为Go中关键字的C结构字段名称可以是 通过在前缀下加下划线来访问:如果x指向C结构 一个名为" type"的字段,x._type访问该字段。 C结构字段不能 在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中分配了实例,是这样吗?
感谢您的帮助!
答案 0 :(得分:2)