📜  结构使用.或 -> (1)

📅  最后修改于: 2023-12-03 14:56:52.010000             🧑  作者: Mango

结构使用. 或 ->

在编程中,. 和 -> 是两个常见的符号,它们用于访问结构中的字段和方法。在本文中,我们将深入介绍这两种符号的用法和区别。

用法
.

在结构体中,通过 . 可以直接访问其字段。例如,假设有以下结构体定义:

type Person struct {
    Name    string
    Age     int
    Address Address
}

我们可以使用 . 来访问这个结构体:

var p Person
p.Name = "Alice"
p.Age = 30
p.Address.City = "Shanghai"
->

-> 通常用在指向结构体的指针上,访问其字段或方法。

type Person struct {
    Name    string
    Age     int
    Address Address
}

func (p *Person) SayHi() {
    fmt.Printf("Hi, my name is %s, and I am %d years old.\n", p.Name, p.Age)
}

func main() {
    var p *Person = &Person{Name: "Bob", Age: 25, Address: Address{City: "Beijing"}}
    p.SayHi()
    p.Age++
    fmt.Printf("Now I am %d years old.\n", p.Age)
}

输出:

Hi, my name is Bob, and I am 25 years old.
Now I am 26 years old.
区别

. 直接访问结构体字段,而 -> 则通过指针来访问结构体字段。

type Person struct {
    Name    string
    Age     int
    Address Address
}

func main() {
    p := Person{Name: "Alice", Age: 30, Address: Address{City: "Shanghai"}}
    q := &p

    fmt.Println(p.Name, q.Name) // Alice Alice
    fmt.Println(p.Age, q.Age)   // 30 30

    q.Age++
    fmt.Println(p.Age, q.Age)   // 31 31
}

在上面的例子中,我们通过 q 指针修改了 p 的 Age 字段,因为它们指向的是同一个结构体。

总结

. 和 -> 都是访问结构体字段的符号,. 用在结构体本身上,而 -> 用在结构体指针上。使用时要注意区别。