Golang之interface(多态,类型断言)
多态用法
package main //一种事物的多种形态,都可以按照统一的接口进行操作 //多态 import ( "fmt" "math/rand" "sort" ) type Student struct { Name string Id string Age int sortType int } type Book struct { Name string Author string } //切片默认传地址 type StudentArray []Student func (p StudentArray) Len() int { return len(p) } func (p StudentArray) Less(i, j int) bool { return p[i].Name < p[j].Name } func (p StudentArray) Swap(i, j int) { p[i], p[j] = p[j], p[i] } func main() { var stus StudentArray for i := 0; i < 10; i++ { stu := Student{ Name: fmt.Sprintf("stu%d", rand.Intn(100)), Id: fmt.Sprintf("110%d", rand.Int()), Age: rand.Intn(100), } stus = append(stus, stu) } for _, v := range stus { fmt.Println(v) } fmt.Println("\n\n") sort.Sort(stus) for _, v := range stus { fmt.Println(v) } }
接口嵌套
package main import "fmt" //接口嵌套 一个接口可以嵌套在另外的接口 type Reader interface { Read() } type Writer interface { Write() } type ReadWriter interface { Reader Writer } type File struct { } func (f *File) Read() { fmt.Println("read data") } func (f *File) Write() { fmt.Print("write data") } func Test(rw ReadWriter) { rw.Read() rw.Write() } func main() { var f File Test(&f) }
类型断言
package main import "fmt" type Student struct { Name string Sex string } //类型断言 //一个判断传入参数类型的函数 func just(items ...interface{}) { for index, v := range items { switch v.(type) { case bool: fmt.Printf("%d params is bool,value is %v\n", index, v) case int, int64, int32: fmt.Printf("%d params is int,value is %v\n", index, v) case float32, float64: fmt.Printf("%d params is float,value is %v\n", index, v) case string: fmt.Printf("%d params is string,value is %v\n", index, v) case Student: fmt.Printf("%d params student,value is %v\n", index, v) case *Student: fmt.Printf("%d params *student,value is %v\n", index, v) } } } func main() { var b Student = Student{ Name: "stu01", Sex: "female", } just(28, 8.2, "this is a test", b, &b) }
努力成为一个开发者
个人站点:www.pythonav.cn