Maison  >  Article  >  développement back-end  >  Comprendre la différence entre les tranches et les variables en langage Go

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

王林
王林original
2024-04-02 18:42:01400parcourir

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

Variables

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

myVar := 1 // 创建一个整型变量,值为 1

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

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\]

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\]
}

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