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)
}
}
灵活的值和其他类型
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 鼻涕兔 我的好朋友参加了马拉松比赛,让我羡慕不已,她身体强壮,气色红润,身材苗条,和同年龄比至少年轻十岁。 我和她...