go中结构体指针操作

go 中只有值传递

  1. 当modify函数被调用并传入一个Item类型的实例item2时,它实际上接收的是item2的一个副本。因此,函数内部对Name字段的修改仅作用于这个副本上,并不会影响原始的item2实例。这证明了结构体作为值类型,在通过值传递给函数时,任何在函数内部的修改都只会影响其副本,而不会影响原始数据。
  2. 当modifyP函数被调用,并传入一个指向Item类型实例item1的指针时,函数内部对Name字段的修改直接作用于该指针指向的内存地址,即修改了item1指向的原始数据。这说明通过指针传递结构体到函数中,可以使函数直接修改原始结构体实例。
go 复制代码
package main

import (
	"fmt"
)

type Item struct {
	Name  string
	Price float32
}

func modify(item Item) {
	item.Name = "newGlass"
}
func modifyP(item *Item) {
	item.Name = "newBook"
}
func main() {
	item1 := &Item{Name: "Book", Price: 10.99}
	item2 := Item{Name: "glass", Price: 9.99}
	modify(item2)
	modifyP(item1)
	fmt.Println(item1)
	fmt.Println(item2)
}

虽然item1是指针,但是使用时不用*item1,这算是go中的语法糖

输出结果

相关推荐
源代码•宸11 小时前
Golang原理剖析(channel面试与分析)
开发语言·经验分享·后端·面试·golang·select·channel
moxiaoran575313 小时前
Go语言中的泛型
golang
加油201913 小时前
GO语言内存逃逸和GC机制
golang·内存管理·gc·内存逃逸
源代码•宸14 小时前
Golang原理剖析(channel源码分析)
开发语言·后端·golang·select·channel·hchan·sudog
liuyunshengsir14 小时前
golang Gin 框架下的大数据量 CSV 流式下载
开发语言·golang·gin
CHHC188014 小时前
golang 项目依赖备份
开发语言·后端·golang
老蒋每日coding14 小时前
AI智能体设计模式系列(八)—— 记忆管理模式
人工智能·设计模式·golang
且去填词1 天前
深入理解 GMP 模型:Go 高并发的基石
开发语言·后端·学习·算法·面试·golang·go
a程序小傲1 天前
京东Java面试被问:多活数据中心的流量调度和数据同步
java·开发语言·面试·职场和发展·golang·边缘计算
卜锦元1 天前
EchoChat搭建自己的音视频会议系统01-准备工作
c++·golang·uni-app·node.js·音视频