码迷,mamicode.com
首页 > 其他好文 > 详细

golang值传递和引用传递

时间:2021-06-13 10:27:46      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:操作符   操作   print   类型   引用   意思   slice   fun   main   

一、值传递和引用传递区别

package main

import (
	"fmt"
)

func main() {
	// map
	m := make(map[int]string)
	m[0] = "a"
	m[1] = "b"
	changeMap(m)
	fmt.Printf("map:%+v", m)  //输出 map:map[0:aaa 1:b]
	fmt.Println()

	//array
	var a = [2]string{"a", "b"}
	changeArray(a)
	fmt.Printf("array:%+v", a) //输出array:[a b]
	fmt.Println()

	//slice
	var s = []string{"a", "b"}
	changeSlice(s)
	fmt.Printf("slice:%+v", s) //输出slice:[aaa b]
}

func changeMap(m map[int]string) {
	m[0] = "aaa"
}

func changeArray(a [2]string) {
	a[0] = "aaa"
}

func changeSlice(s []string) {
	s[0] = "aaa"
}

二、结构体传递指针或者值

1、值传递

package main

type T struct{
	Value 		int
}

func main(){
	myT := T{Value:666}

	change(myT)

	println(myT.Value)

}
func change(t T){
	t.Value = 999

程序的输出是 666 ,因为这种方法传递的是值一个副本,在change() 函数中,你实际上修改的是副本的值

2、指针传递

package main

type T struct{
	Value 		int
}

func main(){
	myT := T{Value:666}

	change(&myT)

	println(myT.Value)

}
func change(t *T){
	t.Value = 999
} 

这段程序使用了&取地址操作符来获取结构体的地址,而change()函数期望一个T结构体的地址类型 *T,这里*T的意思是指向类型T值得指针;

程序运行输出 999

 

golang值传递和引用传递

标签:操作符   操作   print   类型   引用   意思   slice   fun   main   

原文地址:https://www.cnblogs.com/wuchangblog/p/14878619.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!