值类型
- 值类型通常在栈中分配存储空间
- 值类型作为函数参数传递,是拷贝传递
- 在函数体内修改值类型参数,不会影响到函数外的值
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"
}
引用类型
- 引用类型通常在堆中分配存储空间
- 引用类型作为函数参数传递,是引用传递
- 在函数体内修改引用类型参数,会影响到函数外的值
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"
}