Go 语言中如何为结构体定义方法 (method)?

推荐答案

在 Go 语言中,可以通过在函数名前指定接收者(receiver)来为结构体定义方法。接收者可以是值类型或指针类型。以下是定义方法的示例:

-- -------------------- ---- -------
---- ------ ------ -
    ---- ------
    ---  ---
-

-- ----
---- -- ------- ---------- -
    ------------------ -- ---- -- -- --- - -- -- ----- -------- ------- ------
-

-- -----
---- -- -------- ------------- ---- -
    ----- - ------
-

本题详细解读

1. 值接收者与指针接收者的区别

  • 值接收者:方法接收的是结构体的一个副本,对副本的修改不会影响原始结构体。
  • 指针接收者:方法接收的是结构体的指针,对指针的修改会直接影响原始结构体。

2. 方法定义语法

  • 方法定义时,接收者位于 func 关键字和方法名之间。
  • 接收者可以是结构体类型或结构体指针类型。

3. 方法调用

  • 对于值接收者的方法,可以通过结构体实例或结构体指针调用。
  • 对于指针接收者的方法,只能通过结构体指针调用。

4. 选择值接收者还是指针接收者

  • 如果方法需要修改结构体的状态,应使用指针接收者。
  • 如果方法不需要修改结构体的状态,且结构体较小,可以使用值接收者。
  • 如果结构体较大,使用指针接收者可以避免复制结构体的开销。

5. 方法集

  • 类型 T 的方法集包含所有接收者为 T*T 的方法。
  • 类型 *T 的方法集包含所有接收者为 T*T 的方法。

这意味着,指针类型的方法集包含了值类型的方法集,但反之不成立。

纠错
反馈