Ce qui suit est la rubrique tutoriel golang pour vous présenter le passage des tableaux Golang. J'espère qu'il sera utile aux amis dans le besoin !
Explication détaillée du transfert des matrices Golang
Aujourd'hui, je vais partager avec vous une explication détaillée du transfert des matrices Golang .Je pense que le contenu est assez bon, et j'aimerais le partager avec vous maintenant. Il a une très bonne valeur de référence. Les amis qui en ont besoin peuvent suivre l'éditeur et y jeter un œil
Concept. introduction
Tableaux et tranches
Un tableau est une séquence numérotée de longueur fixe d'éléments de données du même type unique. La longueur du tableau peut atteindre 2 Go et il s’agit d’un type valeur. Une tranche est une référence à un fragment contigu d’un tableau, donc une tranche est un type référence.
Passer par valeur et passer par référence
Il existe deux manières de transmettre les paramètres des fonctions en langage Go, passer par valeur et passer par référence. Go utilise le passage par valeur pour transmettre les paramètres par défaut, c'est-à-dire en transmettant une copie du paramètre. Lorsque la valeur de la copie est modifiée dans la fonction, la variable d'origine ne sera pas affectée.
Le passage par référence peut en fait être appelé "passage par valeur", mais la copie est une copie d'une adresse, à travers laquelle la valeur à l'adresse pointée par cette valeur peut être modifiée.
En langage Go, lors de l'appel de fonctions, les types référence (slice, map, interface, canal) sont passés par référence par défaut.
Inconvénients lors du passage de tableaux
Généralement, passer un pointeur coûte moins cher que passer une copie, surtout lorsque le tableau est particulièrement grand. La raison spécifique est la suivante :
Le transfert de valeur nécessite une copie complète du tableau initial et place cette copie sur la pile, ce qui consommera beaucoup de temps d'exécution, la méthode de transfert de valeur est donc relativement inefficace.
La copie du tableau initial nécessite de l'espace mémoire supplémentaire (mémoire sur la pile)
Le compilateur doit générer spécifiquement une partie du code pour copier le tableau initial, ce qui rendra le programme plus grand.
Comment éviter
Comme introduit ci-dessus, il existe deux méthodes : la première utilise des pointeurs, c'est-à-dire le passage par référence ; les tranches sont des références de type, passées par référence par défaut.
Passer à l'aide de pointeurs
package main import "fmt" func main() { var arr = [5]int{1, 2, 3, 4, 5} fmt.Println(sum(&arr)) } func sum(arr *[5]int) int { s := 0 for i := 0; i < len(arr); i++ { s += arr[i] } return s }
Passer à l'aide de tranches
package main import "fmt" func main() { var arr = [5]int{1, 2, 3, 4, 5} fmt.Println(sum(arr[:])) } func sum(arr []int) int { s := 0 for i := 0; i < len(arr); i++ { s += arr[i] } return s }
La dernière méthode est généralement plus courante.
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!