方法--Go语言学习笔记

方法–Go语言学习笔记

go语言中同时有方法和函数。一个方法就是一个包含了接收者的函数,接收者可以是命名类型或结构体类型的一个值或者是一个指针

因为Go语言不是纯面向对象的编程语言,所以方法区别于函数,即实现指定类别才可以调用,用来模仿以达到类的功能

语法:

func (接收者) 方法名(参数列表) (返回值列表) {

}

对比函数:

​ A:意义:

​ 方法:某个类别的行为功能,需要指定的接收者调用

​ 函数:一段独立功能的代码,可以直接调用

B:语法:

​ 方法:方法名可以相同,只要接收者不同

​ 函数:命名不能冲突

type cat struct{
     
     color string
     age int
}
type worker struct{
     
    name string
    age int
}
func(w worker)Info(){
     
    fmt.Println(w.name,w.age)
}
func(w *worker)rest(){
     
    fmt.Println(w.name,"在休息")
}
func(c cat)Info(){
     
    fmt.Println(c.color,c.age)
}
func main(){
     
    w1:=worker{
     name:"王五",age:34}
    w1.Info()//王五 34
    w2:=&worker{
     name:"武者",age:19}//w2为指针
    w2.rest()//武者 休息
    c1:=cat{
     color:"yello",age:1}
    c1.Info()//yello 1  Info与worker同名
}

通过匿名字段和方法实现继承

//定义父类
type Person struct{
     
    name string
    age int
}
//定义子类
type Student struct{
     
    Person//匿名字段
    school string
}
//父类方法
func(P Person)eat(){
     
    fmt.Println("吃饭")
}
func(S Student)eat(){
     //子类重写方法
    fmt.Println("吃烧烤")
}
func main(){
     
    p1:=Person{
     nmae:"王二狗",age:30}
    fmt.Println(p1.name,p1.age)//王二狗 30
    p1.eat()//吃饭
    
    s1:=Sttudent{
     Person{
     "Rubby",18},"北京大学"}
    fmt.Println(s1.name)// Rubby
    s1.eat()//吃烧烤
}

你可能感兴趣的:(go)