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
的值。