Go语言编程:从基础到高级特性
1. 值与指针
在Go语言里,所有内容都是按值传递的。当调用函数或方法时,会在栈中创建变量的副本。这意味着对值所做的更改不会在被调用函数外部体现。即便像切片、映射和其他引用类型也是按值传递,但由于其内部结构包含指针,它们的表现就如同按引用传递一样。
1.1 值传递示例
package main import ( "fmt" ) type A int func (a A) Foo() { a++ fmt.Println("foo", a) } func main() { var a A fmt.Println("before", a) // 0 a.Foo() // 1 fmt.Println("after", a) // 0 }在这个例子中,Foo方法里对a的修改仅在该方法内部生效,不会影响到main函数中的a。
1.2 指针传递示例
若要修改原始变量,参数必须是指向该变量本身的指针。指针会被复制,但它引用的是同一块内存区域,这样就能改变其值。
type User struct { Name string Age int } func (u *User) Birthday() { u.Age++ fmt.Printl