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) }