背景: 使用している C ライブラリの周りに薄い Go ラッパーを本質的に提供するパッケージを作成しようとしています。他のいくつかのパッケージは C ライブラリの低レベル機能に依存しており、大量の Go ラッパー コードをコピーパスタしたくないため、このパッケージは意図的に非常に未加工です。
次のような C 構造体があるとします。
typedef struct {
uint32_t fizz;
uint64_t buzz;
} test
CGo では、C 構造体をラップして、次のように新しいメソッドを作成します。
package test
type Test C.test
func NewTest() *Test {
return &Test{1,2}
}
問題は、パッケージの外では、C 構造体のフィールドにアクセスできないことです。
package main
import "test"
func main() {
t := test.NewTest()
_ = t.fizz // ERROR!!! Unexported field name!!
}
これを回避する簡単な方法はありますか (すべてのフィールドのアクセサ メソッドを作成する以外に)?