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.Pr
超级会员免费看
订阅专栏 解锁全文
1132

被折叠的 条评论
为什么被折叠?



