首頁 > 後端開發 > Golang > 如何使用 cgo 存取 Go 中「const char*」的 C 陣列?

如何使用 cgo 存取 Go 中「const char*」的 C 陣列?

Mary-Kate Olsen
發布: 2024-12-05 18:34:11
原創
230 人瀏覽過

How to Access a C Array of `const char*` in Go using cgo?

透過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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板