Mengakses Tatasusunan C const char* daripada Go melalui cgo
Melibatkan tatasusunan const char* dalam kod Go melalui cgo boleh mencabar . Untuk menangani isu ini, pertimbangkan untuk menggunakan strategi yang menukar tatasusunan C menjadi kepingan Go. Berikut ialah contoh yang menunjukkan pendekatan ini:
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)) } }
Pendekatan ini bergantung pada menukar tatasusunan C menjadi kepingan Go menggunakan penghantaran jenis. Ungkapan unsafe.Pointer(&C.myStringArray) mengembalikan penuding kepada elemen pertama dalam tatasusunan C, yang kemudiannya dilemparkan ke penuding kepada hirisan Go.
Dengan menghiris penuding kepada tatasusunan C, anda buat kepingan Go yang merujuk kepada elemen asas tatasusunan C. Potongan ini boleh diulang dan setiap elemen boleh ditukar kepada rentetan Go menggunakan fungsi cgo.GoString.
Menggunakan kaedah ini, anda boleh mengakses dan bekerja dengan tatasusunan C anda const char* dalam kod Go anda , membolehkan anda menggunakan semula fail indeks pengelogan yang sama merentas platform berbeza.
Atas ialah kandungan terperinci Bagaimana untuk Mengakses Tatasusunan C `const char*` dalam Go menggunakan cgo?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!