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

我遇到了在线文档与我在访问 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 中分配了实例,是这样吗??


谢谢你的帮助!


收到一只叮咚
浏览 180回答 1
1回答

尚方宝剑之说

答案就在您在问题中的引用中:在转到文件,C的结构字段名是关键字,在Go可以通过用下划线前缀来访问(...)i, d, ands不是 Go 中的关键字。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go