Maison >développement back-end >Golang >Comprendre la différence entre les tranches et les variables en langage Go
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.
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.
Une tranche se compose de trois parties :
mySlice := []int{1, 2, 3} // 创建一个整型切片,包含元素 1、2 和 3
Les variables stockent leurs valeurs directement au lieu de référencer la structure de données sous-jacente.
myVar := 1 // 创建一个整型变量,值为 1
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.
Considérons une fonction qui prend une tranche et la trie. Les variables nums
和 result
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!