Maison > développement back-end > Golang > le corps du texte

Comprendre la différence entre les tranches et les variables en langage Go

王林
Libérer: 2024-04-02 18:42:01
original
398 Les gens l'ont consulté

Les tranches et les variables sont différentes dans le langage Go : les tranches sont des types référence et font référence au tableau sous-jacent, tandis que les variables stockent directement les valeurs. L'affectation à une variable crée une nouvelle copie, tandis que l'affectation à une tranche crée une nouvelle tranche pointant vers le même tableau. Les tranches utilisent des références, donc la modification d'une tranche peut affecter d'autres tranches qui font référence au même tableau, mais les variables ne sont pas affectées.

Comprendre la différence entre les tranches et les variables en langage Go

Comprenez la différence entre les tranches et les variables dans le langage Go

Les tranches dans le langage Go sont un type de référence qui peut pointer vers le tableau sous-jacent. Ceci est différent d’une variable, qui stocke directement sa valeur.

Slices

Une tranche se compose de trois parties :

  • Pointeur : pointe vers la position de départ du tableau sous-jacent
  • Longueur : le nombre d'éléments dans la tranche
  • Capacité : le nombre d'éléments disponibles dans le tableau sous-jacent de la tranche
mySlice := []int{1, 2, 3} // 创建一个整型切片,包含元素 1、2 和 3
Copier après la connexion

Variables

Les variables stockent leurs valeurs directement au lieu de référencer la structure de données sous-jacente.

myVar := 1 // 创建一个整型变量,值为 1
Copier après la connexion

Différences

1. Affectation

L'affectation à une variable crée une nouvelle copie de la variable :

var1 := 1
var2 := var1

var1 = 2 // 修改 var1 的值

fmt.Println(var1, var2) // 输出:2 1
Copier après la connexion

Et l'affectation à une tranche crée une nouvelle tranche pointant vers le même tableau sous-jacent :

slice1 := []int{1, 2, 3}
slice2 := slice1

slice1[0] = 4 // 修改 slice1 中的元素

fmt.Println(slice1, slice2) // 输出:\[4 2 3\] \[4 2 3\]
Copier après la connexion

2. Les variables Memory Managed

stockent leurs valeurs directement, donc l'attribution de nouvelles variables n'affecte pas les autres variables. Les tranches utilisent des références, donc la modification d'une tranche peut affecter d'autres tranches qui font référence au même tableau sous-jacent.

3. Passage aux fonctions

Les variables sont transmises aux fonctions en tant que valeurs, tandis que les tranches sont transmises aux fonctions en tant que références. Cela signifie que les fonctions peuvent modifier les tranches, mais pas les variables.

Exemple pratique

Considérons une fonction qui prend une tranche et la trie. Les variables numsresult sont traitées comme deux tranches différentes, même si elles font référence au même tableau sous-jacent.

func sortSlice(nums []int) {
    sort.Ints(nums) // 对切片排序
}

func main() {
    nums := []int{3, 1, 2}
    result := nums

    fmt.Println(nums) // 输出:\[3 1 2\]

    sortSlice(result) // 对 result 进行排序

    fmt.Println(nums) // 输出:\[1 2 3\]
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal