zoukankan      html  css  js  c++  java
  • C#/JAVA 程序员转GO/GOLANG程序员笔记大全(DAY 04)

    -------------------- interface 接口

    // 定义:
    type IHumaner interface {
        SayHi()        // 接口中只能是方法声明,没有实现,没有数据字段
    }
    
    // Student ...
    type Student struct {
        id     int
        name string
    }
    
    func (tmp *Student) SayHi() {
        fmt.Println("Student[%s, %d] SayHi", tmp.name, tmp.id)
    }
    
    // Teacher ...
    type Teacher struct {
        addr  string
        group string
    }
    
    func (tmp *Teacher) SayHi() {
        fmt.Println("Teacher[%s, %d] SayHi", tmp.addr, tmp.group)
    }
    
    // MyStr
    type MyStr string
    func (tmp *MyStr) SayHi() {
        fmt.Println("MyStr[%s, %d] SayHi", *tmp)
    }
    
    func main() {
        // 定义接口类型的变量
        var i IHumaner
        
        // 只是实现了此接口的方法的类型,那么这个类型的变量(接收者类型)就可以给i赋值
        s := &Student{"loong", 666}
        i = s
        i.SayHi()
        
        t := &Teacher{"cls", "ShenZhen"}
        i = t
        i.SayHi()
        
        var str MyStr = "hello loong"
        i = &str
        i.SayHi()
        
        // Print Result
        // loong 666 ... cls ... hello loong
    }


    -------------------- interface 接口 多态的应用

    // 多态的应用
    func WhoSayHi(i IHumaner){
        i.SayHi()
    }
    
    // 调用多态
    s := &Student{"loong", 666}
    t := &Teacher{"cls", "ShenZhen"}
    var str MyStr = "hello loong"
    
    WhoSayHi(s)
    WhoSayHi(t)
    WhoSayHi(&str)
    
    // 创建一个切片
    x := make([]IHumaner, 3)
    x[0] = s
    x[1] = t
    x[2] = &str
    
    for _, i := range x {
        i.SayHi()
    }


    -------------------- interface 空接口 (任务类型)

    func main() {
        // 空接口是万能类型
        type tmp interface{} = 1
        // 字符串
        tmp = "abc"
        tmp = &v2
        // .. 等等数据类型    
        
        // ***** 打印参数的内部实现就是采用的空接口
        // ftm.Println(args ...interface{})
    }
    -------------------- 类型断言 (类型查询)
    struct Student struct {
        id      int
        name string
    }
    
    func main() {
        i := make([]interface{}, 3)
        i[0] = 1
        i[1] = "hello go"
        i[2] = Student{666, "loong"}
        
        // 类型查询
        for index, data := range i {
            // 第一个返回值,第二个返回判断结果的真假
            if value, ok := data.(int); ok == true {
                    
            }
            // data.(string)      data.(Student)  都可以作为判断
        }
        
        // 同理,data.(type) 也可以作用于判断类型 return int, string, ...
    }
     
  • 相关阅读:
    一款开源免费跨浏览器的视频播放器--videojs使用介绍(转)
    forward内部跳转 和redirect重定向跳转的区别
    心理学--斯纳金
    心理学--大脑
    心理学--普及
    经济--国债,外汇
    经济--公积金
    经济--技术分析
    经济--分级基金3
    经济--分级基金
  • 原文地址:https://www.cnblogs.com/loongsoft/p/9397030.html
Copyright © 2011-2022 走看看