golang的值傳遞和引用傳遞

s := [3]int{1, 2, 4}
func(v [3]int) {
	v[0] = 0
}(s)
fmt.Println(s) //參數固定長度數組是值傳遞 輸出1 2 4

func(v []int) {
	v[0] = 0
}(s[:])
fmt.Println(s) //參數非固定長度是切片是引用傳遞 輸出0 2 4

m := map[int]int{
	1: 10,
	2: 20,
	3: 30,
}
func(v map[int]int) {
	v[3] = 40
}(m)
fmt.Println(m) //map是引用傳遞 輸出[1:10 2:20 3:40]

//另外channel也是引用傳遞
//-----------------------

type Test struct {
	a int
}

t := Test{a: 1}
func(v Test) {
	v.a = 5
}(t)
fmt.Println(t) //對象是值傳遞 輸出{1}

//其他值傳遞的還有string 和各種基本類型
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章