Maison >développement back-end >Golang >Comment accéder à un tableau C de « const char* » dans Go en utilisant cgo ?

Comment accéder à un tableau C de « const char* » dans Go en utilisant cgo ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-05 18:34:11225parcourir

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

Accéder à un tableau C de const char* depuis Go via cgo

Implanter des tableaux de const char* dans le code Go via cgo peut être difficile . Pour résoudre ce problème, envisagez d'adopter une stratégie qui convertit le tableau C en tranche Go. Voici un exemple qui illustre cette approche :

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))
    }
}

Cette approche repose sur la conversion du tableau C en une tranche Go à l'aide du transtypage de type. L'expression unsafe.Pointer(&C.myStringArray) renvoie un pointeur vers le premier élément du tableau C, qui est ensuite converti en pointeur vers une tranche Go.

En découpant le pointeur vers le tableau C, vous créez une tranche Go qui fait référence aux éléments sous-jacents du tableau C. Cette tranche peut être itérée et chaque élément peut être converti en chaîne Go à l'aide de la fonction cgo.GoString.

En utilisant cette méthode, vous pouvez accéder et travailler avec votre tableau C de const char* dans votre code Go , vous permettant de réutiliser les mêmes fichiers d'index de journalisation sur différentes plates-formes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn