方法的概念
Go语言中同时有函数和方法,一个方法就是一个包含了接受者的函数,接受者可以是命名类型或者结构体类型的一个值或者一个指针,所有给定的类型的方法属于该类型的方法集
方法只是一个函数,它带有一个特殊的接收器类型,它是在func关键字和方法名之间编写的,接收器可以说struct类型或者非struct类型,接受方法可以在方法内部访问
对比函数
A意义:
方法:某个类别的行为功能,需要制定的接受者调用
函数:一段独立功能的代码,可以直接调用
B语法:
方法:方法名可以相同,,只要接受者不同
函数:命名不能冲突
func (t Type接受者) methodName方法名(parameter list参数列表)(return list返回值列表){
}
func funcName(parameter list)(return list){
}
package main
import "fmt"
func main(){
w1 := Worker{name:"王二狗",age:18,sex:"男"}
w1.work() //王二狗 在工作。。。
w2 := &Worker{name:"Ruby",age:34,sex:"女"}
fmt.Printf("%T\n",w2) //*main.Worker
w2.work() //Ruby 在工作。。。
w2.rest() //Ruby 在休息
w1.rest() //王二狗 在休息
w2.printInfo() //工人姓名:Ruby,工人年龄:34,工人性别:女
c1 := Cat{color:"白色的",age:1}
c1.printInfo() //猫咪颜色:白色的,猫咪年龄:1
}
//1.定义一个工人结构体
type Worker struct { //w = w1
//字段
name string
age int
sex string
}
type Cat struct{
color string
age int
}
//2.定义行为方法
func (w Worker) work(){
fmt.Println(w.name,"在工作。。。")
}
func (p *Worker) rest(){ //p=w2,p=w1的地址
fmt.Println(p.name,"在休息")
}
func (p *Worker) printInfo(){
fmt.Printf("工人姓名:%s,工人年龄:%d,工人性别:%s\n",p.name,p.age,p.sex)
}
func (p *Cat) printInfo(){
fmt.Printf("猫咪颜色:%s,猫咪年龄:%d\n",p.color,p.age)
}
网友评论