Golang 指针类型和值类型传递

本文探讨了Golang中指针类型和值类型在参数传递时的区别。指针类型传递允许直接修改原始变量,由于是浅拷贝,拷贝后的指针与原指针指向同一内存地址。而值类型传递则会产生深度拷贝,新值在不同的内存空间,修改不会影响原始值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.指针类型传递,可以达到修改变量值的目的。指针类型的拷贝是浅拷贝,拷贝后的值,指向的内存地址和原值的内存地址一样,修改其中一个值,这个内存地址上的值都会改变
2.值类型的拷贝是深度拷贝,会将给拷贝的值创建一个新的内存空间,存储值

package main

import "fmt"

// Test 测试结构体
type Test struct {
	Name string
	Num  int
}

// getTestInfo_1 t操作对象本身 => 修改内存中引用的值
func (t *Test) getTestInfo_1() {
	t.Name = "测试"
}

// getTestInfo_2 t为局部变量,对其修改不影响对象的值 => 一个副本(不影响原来的内存)
func (t Test) getTestInfo_2() Test {
	t.Num = 2
	return t
}

func main() {
	test := &Test{}
	test.getTestInfo_1()
	test2 := test.getTestInfo_2()
	fmt.Printf("Test1:%v, Test2:%v \n", test, test2)
}

返回值:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值