灵活的值和其他类型

2018-11-15  本文已影响0人  bocsoft
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)
    }


}


上一篇下一篇

猜你喜欢

热点阅读