Zugriff auf ein C-Array von const char* von Go über cgo
Das Einbeziehen von Arrays von const char* in Go-Code über cgo kann eine Herausforderung sein . Um dieses Problem zu lösen, sollten Sie eine Strategie in Betracht ziehen, die das C-Array in ein Go-Slice umwandelt. Hier ist ein Beispiel, das diesen Ansatz demonstriert:
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)) } }
Dieser Ansatz basiert auf der Konvertierung des C-Arrays in ein Go-Slice mithilfe von Typumwandlung. Der Ausdruck unsafe.Pointer(&C.myStringArray) gibt einen Zeiger auf das erste Element im C-Array zurück, der dann in einen Zeiger auf ein Go-Slice umgewandelt wird.
Durch das Slicen des Zeigers auf das C-Array können Sie Erstellen Sie ein Go-Slice, das auf die zugrunde liegenden Elemente des C-Arrays verweist. Dieses Slice kann iteriert werden und jedes Element kann mit der Funktion cgo.GoString in einen Go-String konvertiert werden.
Mit dieser Methode können Sie auf Ihr C-Array von const char* in Ihrem Go-Code zugreifen und damit arbeiten , sodass Sie dieselben Protokollierungsindexdateien auf verschiedenen Plattformen wiederverwenden können.
Das obige ist der detaillierte Inhalt vonWie greife ich mit cgo auf ein C-Array von „const char*' in Go zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!