ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 一、定义 ![](https://img.kancloud.cn/71/ea/71eac8f392b76179018b6f5d9defd9f5_628x272.png) ## 二、实例 ~~~ package main import "fmt" // 定义接口 type demo1 interface { //定义方法 Fun01() } // 结构体 type User struct { Name string Age int } type User2 struct { Name string Age int } func (u *User)Fun01() { fmt.Printf("一、%s的年龄为%d\n",u.Name,u.Age) } func (u2 *User2)Fun01() { fmt.Printf("二、%s的年龄为%d\n",u2.Name,u2.Age) } //自定义类型中使用 type mysay string func (m mysay) Fun01() { fmt.Printf("人生无常大娃套小娃的是%s\n",m) } //演示多态 //参数为接口类型 func WhoSay(h *User){ h.Fun01() } func main() { u1 := &User{"二哈",20} u2 := &User2{"大哈",22} var str mysay = "猜猜看" u1.Fun01() u2.Fun01() str.Fun01() // 多态 //WhoSay(u1) //WhoSay(u2) //WhoSay(str) } ~~~ ## 三、接口继承 ~~~ package main import "fmt" //定义接口 type Humaner interface { //方法 Say() } type Personer interface { //相当于写了Say() Humaner //唱歌 Sing(lyrics string) } type Student struct { name string score int } func (s *Student) Say() { fmt.Printf("Student[%s,%d] 瞌睡不断\n", s.name, s.score) } func (s *Student) Sing(lyrics string) { fmt.Printf("Student sing[%s]!!\n", lyrics) } func main() { s := &Student{"学生", 88} //调Personner方法 var p Personer p = s p.Say() p.Sing("aaa") } ~~~ ## 四、comma-ok断言 ~~~ package main import "fmt" //空接口 type Element interface{} type Person struct { name string age int } func main() { //3容量的切片 list := make([]Element, 3) list[0] = 1 //int list[1] = "Hello" //string list[2] = Person{"zhangsan", 18} for index, element := range list { //类型断言:value,ok = element.(T) if value, ok := element.(int); ok { fmt.Printf("list[%d] 是int类型,值是 %d\n", index, value) } else if value, ok := element.(string); ok { fmt.Printf("list[%d] 是string类型,值是 %s\n", index, value) } else { fmt.Printf("list[%d] 是其他类型\n", index) } } } ~~~ 运行结果: list[0] 是int类型,值是 1 list[1] 是string类型,值是 Hello list[2] 是其他类型 ## 五、switch ~~~ package main import "fmt" //空接口 type Element interface{} type Person struct { name string age int } func main() { //3容量的切片 list := make([]Element, 3) list[0] = 1 //int list[1] = "Hello" //string list[2] = Person{"zhangsan", 18} for index, element := range list { switch value := element.(type) { case int: fmt.Printf("list[%d] 是int类型,值是 %d\n", index, value) case string: fmt.Printf("list[%d] 是string类型,值是 %s\n", index, value) default: fmt.Printf("list[%d] 是其他类型\n", index) } } } ~~~