接口

  1. * 接口,方法的集合,interface来定义
  1. //定义接口 interface ,方法的集合
  2. type USB interface{
  3. input() //输入方法
  4. output() //输出方法
  5. }
  6. //结构体
  7. type mouse struct{
  8. name string
  9. }
  10. type keyBoard struct{
  11. name string
  12. }
  13. //结构体实现了接口中的所以方法代表实现了这个接口,否则不算实现接口
  14. func (m mouse) output(){
  15. fmt.Println("output")
  16. }
  17. func (m mouse) input(){
  18. fmt.Println("input")
  19. }
  20. func (k keyBoard) output(){
  21. fmt.Println(k.name,"output")
  22. }
  23. func (k keyBoard) input(){
  24. fmt.Println(k.name,"input")
  25. }
  26. //接口调用测试
  27. func test(u USB){
  28. u.input()
  29. u.output()
  30. }
  31. func main() {
  32. m:=mouse{name: "雷蛇"}
  33. test(m)
  34. k:=keyBoard{name: "罗技"}
  35. test(k)
  36. }

空接口

  1. * 不包含任何方法,所有结构体默认实现了空接口,空接口可以存储任何类型
  1. //定义空接口
  2. type A interface{}
  3. //结构体
  4. type dog struct{
  5. name string
  6. }
  7. type cat struct{
  8. name string
  9. }
  10. //测试接口
  11. func test(a A){
  12. fmt.Println(a)
  13. }
  14. func main() {
  15. //空接口可以接收任意类型
  16. var a A=dog{name: "a"}
  17. var b A=cat{name: "b"}
  18. var c A=1
  19. var d A="qwe"
  20. fmt.Println(a)
  21. fmt.Println(b)
  22. fmt.Println(c)
  23. fmt.Println(d)
  24. }

接口嵌套

  1. * 接口中嵌套接口
  1. //接口
  2. type A interface{
  3. test1()
  4. }
  5. type B interface{
  6. test2()
  7. }
  8. type C interface{
  9. //导入A、B接口
  10. A
  11. B
  12. test3()
  13. }
  14. //结构体,实现C接口
  15. type dog struct{
  16. }
  17. func (d dog) test1(){
  18. fmt.Println("test1")
  19. }
  20. func (d dog) test2(){
  21. fmt.Println("test2")
  22. }
  23. func(d dog) test3(){
  24. fmt.Println("test3")
  25. }
  26. func main() {
  27. //dog有4个形态:dog,A,B,C
  28. var d dog =dog{}
  29. d.test1()
  30. d.test2()
  31. d.test3()
  32. }

接口断言

  1. * 检查接口类型的变量是不是符合期望值
  2. * 被断言的对象必须是接口类型
  3. * 通过switch i .(type) case 来判断
  1. //接口
  2. type A interface{}
  3. func testA(i interface{}){
  4. //switct i.(type) 断言
  5. switch i.(type){
  6. case string:
  7. fmt.Println("string")
  8. case int:
  9. fmt.Println("int")
  10. case A:
  11. fmt.Println("A")
  12. case nil:
  13. fmt.Println("nil")
  14. case interface{}:
  15. fmt.Println("interface{}")
  16. default:
  17. fmt.Println("未知")
  18. }
  19. }
  20. func main() {
  21. testA("string")
  22. testA(1)
  23. var a A
  24. var a1 A=1
  25. testA(a)
  26. testA(a1)
  27. }