Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengakses Tatasusunan C `const char*` dalam Go menggunakan cgo?

Bagaimana untuk Mengakses Tatasusunan C `const char*` dalam Go menggunakan cgo?

Mary-Kate Olsen
Lepaskan: 2024-12-05 18:34:11
asal
236 orang telah melayarinya

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

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))
    }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan