方法
首先强调一下:go中任何自定义类型都可以有方法,不仅仅是struct
注意除了:指针和interface
通过下面简单例子理解:
package main
import (
"fmt"
)
//这里是我们普通定义的一个函数add
func add(a,b int) int {
return a+b
}
type Int int
//这里是对Int这个自定义类型定义了一个方法add
func (i Int) add(a,b int) int{
return a+b
}
//如果想要把计算的结果赋值给i
func(j *Int) add2(a,b int){
*j = Int(a+b)
return
}
func main(){
c := add(100,200)
fmt.Println(c)
var b Int
res := b.add(10,100)
fmt.Println(res)
var sum Int
sum.add2(20,20)
fmt.Println(sum)
}
方法的定义:
func(receiver type)methodName(参数列表)(返回值列表){
}
下面是给一个结构体struct定义一个方法
package main
import (
"fmt"
)
type Student struct{
Name string
Age int
}
func (stu *Student)Set(name string,age int){
stu.Name = name
stu.Age = age
}
func main(){
var s Student
s.Set("tome",23)
fmt.Println(s)
}
注意:方法的访问控制也是通过大小写控制的
在上面这个例子中需要注意一个地方func (stu *Student)Set(name string,age int)这里使用的是(stu *Student)而不是(stu Student)这里其实是基于指针对象的方法