zoukankan      html  css  js  c++  java
  • golang学习笔记——面向对象(接口)

    接口
    • 定义及使用
    package main
     
    import (
        "fmt"
    )
     
    //定义一个接口
    type Human interface {
        sayHello()
    }
     
    type Student struct {
        name string
        age  int
    }
     
    type Teacher struct {
        group string
    }
     
    func (stu *Student) sayHello() {
        fmt.Printf("Student[%s,%d] ", stu.name, stu.age)
    }
     
    func (tea *Teacher) sayHello() {
        fmt.Printf("Teacher[%s] ", tea.group)
    }
     
    func WhoSay(tmp Human) {
        tmp.sayHello()
    }
     
    func main() {
        //第一种使用
        s := &Student{"Bon", 12}
        t := &Teacher{"math"}
     
        WhoSay(s)
        WhoSay(t)
     
        //第二种使用 创建切片
        slic := make([]Human, 2)
        slic[0] = s
        slic[1] = t
        for _, v := range slic {
             v.sayHello()
        }
    }
    • 接口继承
    package main
     
    import (
    "fmt"
    )
     
    //定义一个接口
    type Humaner interface {
        sayHello()
    }
    //继承Humaner
    type Personer interface {
        Humaner
        sayWorld(str string)
    }
     
    type Student struct {
        name string
        age  int
    }
     
    func (stu *Student) sayHello() {
        fmt.Printf("Student[%s,%d] ", stu.name, stu.age)
    }
     
    func (stu *Student) sayWorld(str string) {
        fmt.Println(str)
    }
     
    func main() {
        var i Personer
        s := &Student{"Bob", 23}
        i = s
        i.sayHello()
        i.sayWorld("song")
    }
    • 接口转化(超集可以转化为子集,子集不可以转化为超集
    package main
     
    import (
        "fmt"
    )
     
    //定义一个接口
    type Humaner interface { //子集
        sayHello()
    }
     
    type Personer interface { //超集
        Humaner
        sayWorld(str string)
    }
     
    type Student struct {
        name string
        age  int
    }
     
    func (stu *Student) sayHello() {
        fmt.Printf("Student[%s,%d] ", stu.name, stu.age)
    }
     
    func (stu *Student) sayWorld(str string) {
        fmt.Println(str)
    }
     
    func main() {
        var i Personer
     
        i = &Student{"Tom", 16}
     
        var h Humaner
        //子集不能转为超集
        // i = h
     
        //超集可以转化为子集
        h = i
        h.sayHello()
     
    }
    • 空接口(可以保存任意类型的数据)
    package main
     
    import (
    "fmt"
    )
     
    func xxx(arg ...interface{}) {
     
    }
     
    func main() {
        //空接口可保存任意类型的数据
        var i interface{}
        i = 10
        fmt.Println(i)
     
        var m interface{}
        m = "hello world"
        fmt.Println(m)
    }
    • 判断空接口存储的数据类型
    package main
     
    import (
        "fmt"
    )
     
    func main() {
        var i interface{}
        i = 10
     
        //使用 变量.(类型) 判断数据数据类型
        if value, ok := i.(int); ok == true {
             fmt.Println(value)
        }
     
    }
    package main
     
    import (
        "fmt"
    )
     
    func main() {
        var i interface{}
        i = 10
     
        //使用 变量.(type) 判断数据数据类型
        switch value := i.(type) {
            case int:
                 fmt.Printf("int 类型 %d ", value)
            case string:
                 fmt.Print("string 类型 %s ", value)
        }
    }
  • 相关阅读:
    python连接SMTP的TLS(587端口)发邮件python发邮件(带认证,587端口)202010
    JAVA抓取通过JS渲染的网站(动态)网页数据
    moviepy音视频剪辑:与大小相关的视频变换函数详解
    区块链知识博文1: 共识算法之争(PBFT,Raft,PoW,PoS,DPoS,Ripple)
    MoviePy v2.0.0.dev1尚不成熟,不建议大家使用
    区块链学习2:一些概念性的基础知识笔记
    老猿学5G:3GPP 5G规范中的URI资源概念
    区块链学习1:Merkle树(默克尔树)和Merkle根
    老猿Python博客文章目录索引
    老猿学5G:融合计费场景的Nchf_ConvergedCharging_Create、Update和Release融合计费消息交互过程
  • 原文地址:https://www.cnblogs.com/itsuibi/p/14459179.html
Copyright © 2011-2022 走看看