cgo を介して Go から const char* の C 配列にアクセスする
cgo を介して Go コードに const char* の配列を組み込むのは困難な場合があります。この問題に対処するには、C 配列を Go スライスに変換する戦略の採用を検討してください。このアプローチを示す例を次に示します。
import ( "fmt" "unsafe" "github.com/go-cgo/cgo" ) func main() { // You can adjust the `arraySize` constant to reflect the actual number of strings in your C array. const arraySize = 3 // Construct a Go slice from a pointer to the C array. The `&C.myStringArray` expression returns a pointer to the first element in the C array. cStrings := (*[1 << 30]*cgo.Char)(unsafe.Pointer(&C.myStringArray))[:arraySize:arraySize] // Iterate over the Go slice and print each string. for _, cString := range cStrings { fmt.Println(cgo.GoString(cString)) } }
このアプローチは、型キャストを使用して C 配列を Go スライスに変換することに依存しています。 unsafe.Pointer(&C.myStringArray) 式は、C 配列の最初の要素へのポインタを返し、それが Go スライスへのポインタにキャストされます。
C 配列へのポインタをスライスすることで、 C 配列の基礎となる要素を参照する Go スライスを作成します。このスライスは反復処理でき、cgo.GoString 関数を使用して各要素を Go 文字列に変換できます。
このメソッドを使用すると、Go コードで const char* の C 配列にアクセスして操作できます。これにより、異なるプラットフォーム間で同じロギング インデックス ファイルを再利用できるようになります。
以上がcgo を使用して Go で `const char*` の C 配列にアクセスする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。