Go的函数与方法及方法接受者区别?

在Go语言中,函数和方法都是用来封装代码的,但它们在使用方式上有一些不同。

函数是具有一组输入参数和返回值的独立实体,它不依赖于任何类型。例如:

func Add(a int, b int) int {
    return a + b
}

在这个例子中,Add是一个函数,它接受两个整数作为输入,然后返回两个整数的和。

方法是依赖于特定类型的函数,这个特定类型被称为方法的接收者。例如:

type MyInt int

func (m MyInt) Add(otherInt int) int {
    return int(m) + otherInt
}

在这个例子中,Add是一个方法,它的接收者是MyInt类型。这意味着我们可以在任何MyInt类型的实例上调用Add方法。

方法接收者可以是任何类型的值或者指针,不过不能是一个接口类型或者一个指针类型。接收者的类型在方法名前,以(接收者) 方法名的形式出现。

方法接收者有两种类型:值接收者和指针接收者。值接收者方法在调用时,接收者的值会被复制,而指针接收者在调用方法时,会使用接收者的实际地址,所以可以修改接收者的值。

type MyInt int

func (m MyInt) valueReceiver() {    // 值接收者
    m = 5
}

func (m *MyInt) pointerReceiver() { // 指针接收者
    *m = 5
}

func main() {
    var num MyInt = 2
    num.valueReceiver()
    fmt.Println(num)  // 输出 2
    num.pointerReceiver()
    fmt.Println(num)  // 输出 5
}

在这个例子中,你会看到valueReceiver方法没有改变num的值,而pointerReceiver方法改变了num的值。

发表评论

后才能评论