Go值传递验证代码

188 阅读1分钟
package main

import "fmt"

type Person struct {
	AgeYears int
}

func change_1(person Person)  {
	person.AgeYears = 10;
}

func change_2(person *Person)  {
	person.AgeYears = 20;
}

func change_map(temp map[string]int){
	temp["age"] = 200
}

func changeArr_1( temp []int){
	temp[0] = 1000
}

func main()  {
	//修改strut中值
	var t1 = Person{AgeYears:-10};
	change_1(t1)
	fmt.Printf("t1 after change:%#v\n",t1)  //-main.Person{AgeYears:-10}

	//修改strut中值
	var t2 = new(Person);
	t2.AgeYears = -20;
	change_2(t2)
	fmt.Printf("t2 after change:%#v\n",t2)  //&main.Person{AgeYears:20}

	//修改strut中值
	var t3 Person;
	t3.AgeYears = -30;
	change_2(&t3)
	fmt.Printf("t3 after change:%#v\n",t3)  //main.Person{AgeYears:20}

	//修改map中值
	var mpTest   = make(map[string]int)
	mpTest["age"] = 10
	change_map(mpTest)
	age,ok := mpTest["age"]
	if ok {
		fmt.Printf("mptest after Change,age:%#v\n",age)   //200
	}

	//修改数组值
	arr :=[...] int {1,2,3,4,5}
	changeArr_1(arr[:])
	fmt.Printf("arr after Change:%#v\n",arr)   //[5]int{1000, 2, 3, 4, 5}
}

//运行结果
t1 after change:main.Person{AgeYears:-10}
t2 after change:&main.Person{AgeYears:20}
t3 after change:main.Person{AgeYears:20}
mptest after Change,age:200
arr after Change:[5]int{1000, 2, 3, 4, 5}