Utiliser des pointeurs vers des tableaux dans Go
En C, accéder à un tableau via un pointeur est une technique fondamentale. Cependant, dans Go, il semble y avoir une certaine ambiguïté concernant cette opération lorsqu'il s'agit de tranches. Entrons dans les détails.
Considérons la fonction de style C suivante qui prend un pointeur vers un tableau :
void conv(int *x, int xlen, int *h, int hlen, int **y) { for (int i = 0; i < xlen; i++) { for (int j = 0; j < hlen; j++) { *(*y)[i + j] += x[i] * h[j]; } } }
Dans Go, cependant, en essayant d'accéder au pointeur vers le tableau, y, de la même manière, entraîne une erreur du compilateur :
func conv(x []int, xlen int, h []int, hlen int, y *[]int) { for i := 0; i < xlen; i++ { for j := 0; j < hlen; j++ { *y[i+j] += x[i] * h[j] } } }
Le message d'erreur indique que y[i j] est un index de type *[]int, qui n'est pas valide.
Passer des tableaux et des tranches
La solution à ce problème réside dans la compréhension de la nature des tableaux et des tranches dans Go. Selon la documentation Go, lors du passage d'un tableau à une fonction, il est généralement préférable de transmettre une tranche (une référence au tableau) au lieu d'un pointeur vers le tableau.
Utiliser des tranches à la place
Pour réécrire la fonction conv à l'aide de tranches, on peut simplement passer une tranche de []int, comme vu dans ce qui suit exemple :
func conv(x []int, xlen int, h []int, hlen int, y []int) { for i := 0; i < xlen; i++ { for j := 0; j < hlen; j++ { y[i+j] += x[i] * h[j] } } }
Dans ce cas, y est une tranche régulière, et accéder à ses éléments est simple.
Conclusion
Alors que le concept L'utilisation de pointeurs vers des tableaux est courante en C, elle n'est généralement pas recommandée en Go. Au lieu de cela, passer des tranches fournit un moyen plus efficace et idiomatique de référencer des tableaux dans les fonctions Go.
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!