【GO】结构体的值传递VS引用传递

简介: 【GO】结构体的值传递VS引用传递

代码

值传递案例

我们先定义了一个结构体 然后传入showPerson1这个方法里

然后在showPerson1这个方法里修改了name的值

打印结果发现是没有改变的,这是因为值传递时传递的是结构体的副本,而不是真身

image.png屏幕快照 2022-05-18 下午7.36.43.png屏幕快照 2022-05-18 下午7.36.52.png屏幕快照 2022-05-18 下午7.37.03.png屏幕快照 2022-05-18 下午7.37.14.png

package main
import "fmt"
type Person struct {
  name string
  age  int
  kaka []string
}
func main() {
  p := Person{name: "咔咔", age: 24, kaka: []string{"dalanqiu"}}
  // 值传递,传入的是并非是咔咔本人,而是咔咔的副本
  // 对副本的修改并不能影响咔咔本人
  //showPerson1(p)
  // 传入的是结构的本身(地址),并非副本
  showPerson2(&p)
  // showPerson2方法修改的值
  fmt.Println(p.name)
  // p的地址是0x11019a20
  fmt.Printf("p的地址是%p\n", &p)
}
func showPerson1(p Person) {
  // p的地址是0x11019a20
  fmt.Printf("p的地址是%p\n", &p)
  // 咔咔
  fmt.Println(p.name)
  // 24
  fmt.Println(p.age)
  // [dalanqiu]
  fmt.Println(p.kaka)
  p.name = "我不是咔咔"
}
/**
这里的参数是指针类型 在传值的时候就需要指针类型
*/
func showPerson2(p *Person) {
  // p的地址是0x11019a20
  fmt.Printf("p的地址是%p\n", &p)
  // 咔咔
  fmt.Println(p.name)
  // 24
  fmt.Println(p.age)
  // [dalanqiu]
  fmt.Println(p.kaka)
  p.name = "showPerson2方法修改的值"
}
相关文章
|
19天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
93 71
|
1月前
|
存储 Rust Go
Go nil 空结构体 空接口有什么区别?
本文介绍了Go语言中的`nil`、空结构体和空接口的区别。`nil`是预定义的零值变量,适用于指针、管道等类型;空结构体大小为0,多个空结构体实例指向同一地址;空接口由`_type`和`data`字段组成,仅当两者均为`nil`时,空接口才为`nil`。
Go nil 空结构体 空接口有什么区别?
|
1月前
|
编译器 Go
探索 Go 语言中的内存对齐:为什么结构体大小会有所不同?
在 Go 语言中,内存对齐是优化内存访问速度的重要概念。通过调整数据在内存中的位置,编译器确保不同类型的数据能够高效访问。本文通过示例代码展示了两个结构体 `A` 和 `B`,尽管字段相同但排列不同,导致内存占用分别为 40 字节和 48 字节。通过分析内存布局,解释了内存对齐的原因,并提供了优化结构体字段顺序的方法,以减少内存填充,提高性能。
42 3
|
1月前
|
Go
|
3月前
|
Go
Go to Learn Go之结构体
Go to Learn Go之结构体
40 5
|
7月前
|
算法 Java Go
Go vs Java:内存管理与垃圾回收机制对比
对比了Go和Java的内存管理与垃圾回收机制。Java依赖JVM自动管理内存,使用堆栈内存并采用多种垃圾回收算法,如标记-清除和分代收集。Go则提供更多的手动控制,内存分配与释放由分配器和垃圾回收器协同完成,使用三色标记算法并发回收。示例展示了Java中对象自动创建和销毁,而Go中开发者需注意内存泄漏。选择语言应根据项目需求和技术栈来决定。
|
3月前
|
存储 Shell Go
Go语言结构体和元组全面解析
Go语言结构体和元组全面解析
|
3月前
|
存储 Go
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。
|
4月前
|
存储 设计模式 安全
空结构体:Go 语言中的轻量级占位符
【8月更文挑战第31天】
52 0
|
4月前
|
存储 Java Go
Go从入门到放弃之结构体(面向对象)
Go从入门到放弃之结构体(面向对象)