美文网首页
灵活的值和其他类型

灵活的值和其他类型

作者: bocsoft | 来源:发表于2018-11-15 15:28 被阅读0次
    package main
    
    import "fmt"
    
    //为map定义类型 Values
    type Values map[string][]string
    
    //为int64定义类型 MyInt
    type MyInt int64
    
    //为类型Values定义方法Get
    func (v Values) Get(key string) string {
        //转换类型
        m := map[string][]string(v)
        return m[key][0]
    }
    
    //为类型MyInt定义方法Tripple
    func (i MyInt) Tripple() int64 {
        // 需要类型转换
        return int64(i) * 3
    }
    
    //定义接口并实现MyInt类型的方法
    type MyInterface interface {
        Tripple() int64
    }
    
    //定义一个空接口
    type Object interface {
    }
    
    func main() {
        a := map[string][]string{
            "key1": []string{"1", "2"},
            "key2": []string{"3", "4"},
        }
    
        //使用为Values定义的Get方法
        b := Values(a)             //转换为自定义类型
        fmt.Println(b.Get("key1")) //1
        fmt.Println(b.Get("key2")) //3
    
        //使用为MyInt定义的Tripple 方法
        fmt.Println(MyInt(100).Tripple()) //300
    
        //定义一个空接口
        var obj Object
        //把自定义类型赋值给空接口
        obj = b
        objB, yes := obj.(Values)
        fmt.Println(yes)//true
        fmt.Println(objB.Get("key1"))//1
    
        objInt,yes1 := obj.(MyInt)
        fmt.Println(yes1)//false
        fmt.Println(objInt)//0
    
        var m MyInterface
        m = MyInt(9)
        fmt.Println(m.Tripple())//27
    
       var myint1 MyInt
        myint1 = 102
    
        var myif MyInterface //该接口实现了MyInt类型中的方法
        myif = myint1
        fmt.Println(myif.Tripple())//306
    
        switch i := obj.(type){
        case MyInt:
            fmt.Println("x is nil",i)
        case Values:
            fmt.Println("x is Values",i)//x is Values map[key1:[1 2] key2:[3 4]]
        default:
            fmt.Println("don't know the type",i)
        }
    
    
    }
    
    
    

    相关文章

      网友评论

          本文标题:灵活的值和其他类型

          本文链接:https://www.haomeiwen.com/subject/jkpyfqtx.html