【20天学Go】Day 8: 接口 学习时间4-5小时 学习目标掌握接口的定义和使用 难度★★★☆☆1. 接口定义packagemainimportfmt// 定义接口typeSpeakerinterface{Speak()string}typeDogstruct{Namestring}func(d Dog)Speak()string{returnd.Name汪汪叫}typeCatstruct{Namestring}func(c Cat)Speak()string{returnc.Name喵喵叫}funcmain(){// 接口变量vars Speaker sDog{Name:旺财}fmt.Println(s.Speak())sCat{Name:咪咪}fmt.Println(s.Speak())// 多态animals:[]Speaker{Dog{Name:大黄},Cat{Name:小白},}for_,a:rangeanimals{fmt.Println(a.Speak())}}2. 空接口// 空接口可以存储任何值varanyinterface{}any42anyhelloany[]int{1,2,3}// 类型断言value,ok:any.(string)ifok{fmt.Println(value)}// 类型switchswitchv:any.(type){caseint:fmt.Println(int:,v)casestring:fmt.Println(string:,v)default:fmt.Println(unknown type)}// any类型Go 1.18vara any423. 接口组合typeReaderinterface{Read(p[]byte)(nint,errerror)}typeWriterinterface{Write(p[]byte)(nint,errerror)}// 组合接口typeReadWriterinterface{Reader Writer}4. 常用接口// Stringer接口typeStringerinterface{String()string}typePersonstruct{NamestringAgeint}func(p Person)String()string{returnfmt.Sprintf(%s (%d岁),p.Name,p.Age)}// error接口typeerrorinterface{Error()string}5. 小结[接口定义] 1. type Name interface { } 2. 隐式实现无需声明 [空接口] 3. interface{}或any 4. 可存储任何值 5. 类型断言 [接口组合] 6. 嵌入其他接口 [常用接口] 7. Stringer 8. error 9. io.Reader/Writer下一篇预告Day 9 - 错误处理