跳到主要内容

Go 自动解引用

· 阅读需 2 分钟
素明诚
Full stack development

访问数组或切片元素

当你拥有一个指向数组或切片的指针时,可以直接使用索引访问其元素,而无需手动解引用。

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++那样的指针操作。如果你需要进行类似操作,通常可以使用切片或索引进行。