

新闻资讯
技术学院在Go中,通过指针传递结构体可实现多函数共享并实时修改同一对象;因默认值传递会复制副本,而指针传递使所有函数操作同一内存地址,需注意nil检查、并发安全及避免返回局部变量指针。
在 Go 中,通过指针传递结构体或自定义类型的变量,是实现多函数操作同一对象、共享数据的最常用且高效的方式。关键在于:传指针,而非值;所有函数操作的是同一块内存地址上的数据。
Go 默认按值传递(copy)。如果传结构体值,每个函数收到的是独立副本,修改不会影响原始数据。而传指针(*T),所有函数都指向同一块内存,自然实现“共享”和“实时同步”。
例如:
type Counter struct{ Val int }
func increment(c Counter) { c.Val++ } // 修改无效:只改副本
func incrementPtr(c *Counter) { c.Val++ } // 修改生效:改原值
以一个简单的配置管理器为例,多个函数共同读写同一配置实例:
指针共享虽方便,但需注意以下几点:
下面是一个完整可运行的小例子:
type Counter struct {
Val int
Name string
}
func (c *C
ounter) Add(n int) { c.Val += n }
func (c *Counter) Reset() { c.Val = 0 }
func (c *Counter) Print() { fmt.Printf("%s: %d\n", c.Name, c.Val) }
func main() {
c := &Counter{Name: "requests"}
c.Add(5)
c.Print() // requests: 5
anotherFunc(c) // 传同一指针
c.Print() // requests: 12
}
func anotherFunc(c *Counter) {
c.Add(7)
}
所有函数操作的都是 c 所指向的同一个 Counter 实例。