12

これはこの質問のフォローアップです。私は真実ではないかもしれないと仮定したので、私はそれについて明示的に尋ねています. これが実際に可能かどうかを尋ねるのを忘れていたので、これについては既にissue #8114を提出しました。


cgo を使用すると、次のように Go コードを C 型で動作させることができます。

package foo

//#include <sys/stat.h>
import "C"

func fileSizeFromStat(stat *C.struct_stat) int64 {
    return int64(stat.st_size)
}

逆は可能ですか?つまり、go 型で動作する C 関数を作成していますか? これの具体的なポイントは、上記のリンクの質問で概説されています。ユニオンまたはビットフィールドを使用するか、アラインメントによって Go コードと互換性がなくなるため、Go コードからアクセスできない C 構造体をマーシャリングしたいと考えています。

4

2 に答える 2

1

私の知る限り、いいえ、できません。

しかし、 https://github.com/OneOfOne/go-nfqueue/blob/master/nfqueue.go#L130のような醜いものを使用することもできます。ここでは、多くのポインターを取り、go で Go 構造体を構築する Go 関数をエクスポートします。

于 2014-08-29T12:39:46.490 に答える