在 Go 语言中,你可以为任何类型定义方法。一个方法就是一个特殊类型的函数,它被关联到一个特定的类型,这个类型被称为该方法的接收者。

方法的定义

在 Go 中,你可以为任何类型(除了指针和接口)定义方法。一个方法定义看起来像这样:

// 这是一个类型
type MyType int

// 这是一个方法,它的接收者是 MyType
func (m MyType) MyMethod() {
    // 方法体
}

在这个例子中,MyMethod 是一个方法,它的接收者是 MyType。你可以像调用函数一样调用这个方法。

方法的调用

你可以像这样调用方法:

var m MyType
m.MyMethod()

在这个例子中,我们首先声明了一个 MyType 类型的变量 m,然后调用了它的 MyMethod 方法。

方法和接收者

在方法的声明中,接收者被放在了函数名之前。这个接收者可以是任何类型的一个值或者是一个指针。如果它是一个值,那么在方法内部对其的修改不会影响到原始的值。

让我们看一个例子:

type MyType int

func (m MyType) SetValue(newValue MyType) {
    m = newValue
}

func main() {
    var x MyType = 5
    x.SetValue(10)
    fmt.Println(x)  // 输出:5
}

在这个例子中,SetValue 方法试图修改它的接收者 m 的值。但是因为 m 是一个值,而不是一个指针,所以这个修改在方法外部是不可见的。所以,尽管我们尝试将 x 的值设为 10,但 x 的值仍然是 5。

如果我们想让方法能够修改它的接收者的值,我们需要使用一个指针作为接收者:

type MyType int

func (m *MyType) SetValue(newValue MyType) {
    *m = newValue
}

func main() {
    var x MyType = 5
    (&x).SetValue(10)
    fmt.Println(x)  // 输出:10
}

在这个例子中,SetValue 方法的接收者是 *MyTypeMyType 的一个指针)。这意味着 m 是一个指向 MyType 类型值的指针,我们可以通过这个指针来修改这个值。因此,这个程序将 x 的值设为了 10。

总的来说,方法是关联到特定类型的函数。你可以为任何类型定义方法,只要这个类型不是一个指针或者一个接口。你可以使用值或者指针作为方法的接收者,但只有使用指针作为接收者的方法才能修改它的接收者的值。
推荐阅读:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

file


移动安全星球
1 声望2 粉丝