Golang 值传递和引用传递
优质
小牛编辑
133浏览
2023-12-01
Go 语言中 值类型
有:int 系列、float 系列、bool、string、数组、结构体
- 值类型通常在栈中分配存储空间
- 值类型作为函数参数传递,是拷贝传递
- 在函数体内修改值类型参数,不会影响到函数外的值
package main import "fmt" func main() { num := 10 change(num) fmt.Println(num) // 10 } func change(num int) { num = 998 }
package main import "fmt" func main() { arr := [3]int{1, 3, 5} change(arr) fmt.Println(arr) // 1, 3, 5 } func change(arr [3]int) { arr[1] = 8 }
package main import "fmt" type Person struct { name string age int } func main() { p := Person{"lnj", 33} change(p) fmt.Println(p.name) // lnj } func change(p Person) { p.name = "zs" }
Go 语言中 引用类型
有:指针、slice、map、channel
- 引用类型通常在堆中分配存储空间
- 引用类型作为函数参数传递,是引用传递
- 在函数体内修改引用类型参数,会影响到函数外的值
package main import "fmt" func main() { num := 10 change(&num) fmt.Println(num) // 998 } func change(num *int) { *num = 998 }
package main import "fmt" func main() { arr := []int{1, 3, 5} change(arr) fmt.Println(arr) // 1, 8, 5 } func change(arr []int) { arr[1] = 8 }
package main import "fmt" func main() { mp := map[string]string{"name":"lnj", "age":"33"} change(mp) fmt.Println(mp["name"]) // zs } func change(mp map[string]string) { mp["name"] = "zs" }