Go 方法调用规则总结

106 阅读1分钟

1. 设计哲学

Go 语言的设计目标是让开发者更专注于逻辑,而不是纠结于值或指针的细节。通过自动处理值方法和指针方法的调用,Go 提供了灵活的语法糖,使得代码更简洁易读。


2. 方法调用规则

2.1 值方法(值接收者)

  • 规则
    • 可以通过指针调用。
    • 如果通过指针调用,Go 会自动解引用指针。
  • 示例
    addr := Address{City: "New York", State: "NY"}
    addrPtr := &addr
    
    addr.Display()      // 值调用值方法
    addrPtr.Display()   // 指针调用值方法(Go 自动解引用)
    

2.2 指针方法(指针接收者)

  • 规则
    • 可以通过指针调用。
    • 如果通过值调用,Go 会自动取值的地址。
  • 示例
    addr := Address{City: "New York", State: "NY"}
    addrPtr := &addr
    
    addrPtr.UpdateCity("San Francisco") // 指针调用指针方法
    addr.UpdateCity("Chicago")          // 值调用指针方法(Go 自动取地址)
    

3. 适用性

  • 嵌套结构体
    • 嵌入的结构体或结构体指针,方法调用规则与非嵌套结构体完全一致。
  • 非嵌套结构体
    • 方法调用规则与嵌套结构体完全相同。

4. 总结

  • 值方法:可以通过值或指针调用。
  • 指针方法:可以通过指针或值调用。
  • Go 语言自动处理值方法和指针方法的调用,使得代码更简洁易读。