Go 自动解引用
· 阅读需 2 分钟
访问数组或切片元素
当你拥有一个指向数组或切片的指针时,可以直接使用索引访问其元素,而无需手动解引用。
arr := [3]int{10, 20, 30}
pArr := &arr
fmt.Println(pArr[1]) // 输出 20,编译器自动处理了 (*pArr)[1]
访问结构体字段
指向结构体的指针,可以直接访问该结构体的任何字段,就像你在操作结构体实例一样
type Person struct {
Name string
Age int
}
p := &Person{"Alice", 30}
fmt.Println(p.Name) // 输出 "Alice",编译器自动处理了 (*p).Name
调用方法
type Person struct {
Name string
Age int
}
func (p *Person) Greet() {
fmt.Println("Hello,", p.Name)
}
func main() {
person := Person{"Bob", 25}
p := &person
person.Greet() // 可以直接调用
p.Greet() // 同样可以直接调用,Go自动处理了 (*p).Greet()
}
在这个例子中,不论是结构体实例还是其指针,Greet
方法都可以被调用,Go 语言运行时会自动调整。
注意
- 在函数参数传递时,Go 中的所有参数都是按值传递的。这意味着如果你将一个结构体传递给函数,它会被复制。但是如果使用指针,则原始数据可以被函数修改。
- Go 不支持像 C++那样的指针操作。如果你需要进行类似操作,通常可以使用切片或索引进行。