透過cgo 從Go 存取const char* 的C 陣列
透過cgo 在Go 程式碼中涉及陣列可能具有挑戰性。為了解決這個問題,可以考慮採用將 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中文網其他相關文章!