在 Go 语言中,函数与方法代表不同的概念,函数是独立的,方法是指结构体方法,它依赖于结构体,但两者皆以关键字 func 定义,只是定义方式略有不同。
type person struct {
// 定义结构体
name string
weight int
}
// 指针接收者
func (p *person) get_name(name string) string {
// 定义结构体方法
return name
}
// 值接收者
func (p person) get_name(name string) string {
// 定义结构体方法
return name
}
“结构体方法” 与 “函数” 的区别,在于结构体方法必须在关键字和方法名称之间使用小括号声明结构体变量(称为值接收者)或结构体的指针变量(称为指针接收者)。
“指针接收者” 和 “值接收者” 的区别:
以下是一个对比 “值接收者” 和 “指针接收者” 区别的例子:struct_function_receiver.go
package main
import "fmt"
type person struct {
// 定义结构体
name string
weight int
}
func (p *person) setWeigthPointer(weight int) {
p.weight = weight
}
func (p person) setWeigthValue(weight int) {
p.weight = weight
fmt.Println(p.weight)
}
func main() {
p1 := person{}
p1.init("Tom", 99)
fmt.Println(p1)
p1.setWeigthPointer(100)
fmt.Println(p1)
p2 := person{}
p2.init("Json", 99)
fmt.Println(p2)
p2.setWeigthValue(200)
fmt.Println(p2)
// p2 weight 值未变,这就是 “值接收者” 和 “指针接收者” 的区别。
// “值接收者” 是基于原对象,有生成了一个函数上下文里的局部对象。
}
>> 打印数据
{Tom 99}
{Tom 100}
{Json 99}
200
{Json 99}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。