8.创建方法和接口

使用方法

type movie struct {
    Name string
    Rating float32
}

#m *movie表示方法的接受者
func (m *movie) summary() string{
    //code
}
package main

import "fmt"

type person struct{
    name string
    age  int
}

func newPerson(name_1 string,age_1 int) person{
    a := person {name:name_1,age:age_1}
    return a
}

func (m *person) sayHello() {
    fmt.Printf("hello,%s\n",m.name)
}

func main(){
    a := newPerson("siqu",12)
    a.sayHello()
}

// hello,siqu

在这里,创建了一个构造函数newPerson

创建方法集

方法集是可对特定数据类型进行调用的一组方法,在GO语言中,任何数据类型都可有想关联的方法集,这让您能够在数据类型和方法之间建立关系,

使用方法和指针

在设置接受者时,传递值还是传递值得引用,是有很大差别的

如果接受者是一个指针,那么对结构体进行修改可以修改原始结构体

如果接受者是一个值,那么传递进方法中的就是结构体的副本

func (m *person) sayhello(){
    //code,该方法为传递值引用
}

func (m person) sayhello(){
    //code,该方法为传递值
}

使用接口

在GO语言中,接口指定了一个方法集,这是实现模块化的强大方式。你可以将接口视为方法集的蓝本,它描述了方法集中的所有方法,但是没有实现它们

接口描述了方法集中的所有方法,如果要使用接口,那么必须要实现它

type Robot inerface{
    Goon()
}
package main

import "fmt"

type Robot interface{
    Goon() string
}

type T850 struct{
    Name string
}

//具体的实现需要和接口描述的一致
func (m *T850) Goon() string{
    return m.Name
}

type R2D2 struct{
    Name string
}

//具体的实现需要和接口描述的一致
func (m *R2D2) Goon() string{
    return m.Name
}

func Go(r Robot){
    fmt.Println(r.Goon())
}

func main(){
    var t = T850{Name:"SIQU"}
    var r = R2D2{Name:"BOKE"}

    //在这里,传入的是指针
    Go(&t)
    Go(&r)
}

通过接口的方式,能够实现代码的复用

接口可以包含多个实现,这就是多态,如果一个方法集实现了一个接口,那么就说这个方法集与另外一个实现该接口的方法集互为多态

© 版权声明
THE END
喜欢就支持以下吧
点赞0
分享
评论 抢沙发
四曲的头像-四曲博客

昵称

取消
昵称表情代码图片