Go之路(十八):接口和断言

接口

例如,现在有多个结构体,老师,学生等等,现在需要根据他们的名字进行排序,不能每个类型都单独写一个排序

这时候就能用到接口,只要实现接口内置的方法就能直接排序了.可扩展性非常好。

例子:

package main

import(
	"fmt"
	"math/rand"
	"sort"
)

type Student struct{
	Name string
	id int
	Age int
}

type StudentArray []Student

func (self StudentArray)Len()int{
	return len(self)
}
func (self StudentArray)Less(i,j int)bool{
	return self[i].Name < self[j].Name
}
func (self StudentArray)Swap(i,j int){
	self[i],self[j]=self[j],self[i]
}

func main() {
	var stu1 StudentArray
	for i:=0;i<10;i++{
		stu := Student{
			Name:fmt.Sprintf("stu%d",rand.Intn(100)),
			id:rand.Int(),
			Age:rand.Intn(100),
		}
		stu1 = append(stu1, stu)
	}

	for _,v := range stu1{
		fmt.Println(v)
	}
	fmt.Println()
	sort.Sort(stu1)
	for _,v := range stu1{
		fmt.Println(v)
	}
}

  断言:在传入的类型不确定时,可以做简单判断,可以用switch case ; 例如switch a.(type) case int:xxxx

package main

import(
	"fmt"
)

func Test(a interface{}){
	c,ok := a.(int)
	if ok == false{
		fmt.Print("该类型不能转换")
	}
	fmt.Print(c+2)
}

func main()  {
	var a int
	Test(a)
}

  

 

posted @ 2018-12-05 17:54  __Miracle  阅读(160)  评论(0编辑  收藏  举报