go 语言学习笔记⑪——方法
带接收者的函数
是一个和特殊类型相关联的函数
func (receiver ReceiverType)funcName(parameters)result
receiver 不能是个指针或者是接口
只要接收者是不同类型,这个方法就不算同名, 是不同的方法
不能重载
package main
import (
"fmt"
)
type myint int
func (a myint) add(b, d myint) (c myint) {
c = a - b - d
return
}
func main() {
var a myint = 1
fmt.Println(a.add(2, 3))
//-4
}
值传递和引用传递
接收者为普通变量 拷贝数值
package main
import (
"fmt"
)
type Person struct {
name string
sex string
age int
}
type Student struct {
Person
idx int
add string
}
func (a Student) set(name string, sex string, age int, idx int, add string) {
a.name = name
a.sex = sex
a.age = age
a.idx = idx
a.add = add
}
func main() {
var student Student = Student{}
student.set("crm", "1", 19, 100, "hb")
fmt.Printf("%+v", student)
//{Person:{name: sex: age:0} idx:0 add:}
}
###接收者为指针变量 引用传递
package main
import (
"fmt"
)
type Person struct {
name string
sex string
age int
}
type Student struct {
Person
idx int
add string
}
func (a *Student) set(name string, sex string, age int, idx int, add string) {
a.name = name
a.sex = sex
a.age = age
a.idx = idx
a.add = add
}
func main() {
var student Student = Student{}
(&student).set("crm", "1", 19, 100, "hb")
fmt.Printf("%+v", student)
//{Person:{name:crm sex:1 age:19} idx:100 add:hb}
}