多态用法
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 []Studentfunc (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 mainimport "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 mainimport "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)}