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

浙公网安备 33010602011771号