1. package main
    2. import "fmt"
    3. // Animal 声明一个接口
    4. type Animal interface {
    5. eat()
    6. getName() string
    7. getColor() string
    8. }
    9. // Cat 定义结构体
    10. type Cat struct {
    11. name string
    12. color string
    13. }
    14. //Cat 必须实现animal的所有函数接口,否则无法关联
    15. func (cat *Cat) getName() string {
    16. return cat.name
    17. }
    18. func (cat *Cat) getColor() string {
    19. return cat.color
    20. }
    21. func (cat *Cat) eat() {
    22. fmt.Println("今天吃了小鱼")
    23. }
    24. //Dog 定义结构体
    25. type Dog struct {
    26. name string
    27. color string
    28. }
    29. //Dog 必须实现animal的所有函数接口,否则无法关联
    30. func (dog *Dog) getName() string {
    31. return dog.name
    32. }
    33. func (dog *Dog) getColor() string {
    34. return dog.color
    35. }
    36. func (dog *Dog) eat() {
    37. fmt.Println("今天吃了骨头")
    38. }
    39. func printAnimal(animal Animal) {
    40. fmt.Println(animal.getColor(), animal.getName())
    41. animal.eat()
    42. }
    43. func main() {
    44. var animal Animal = &Cat{"小猫", "橘色"}
    45. printAnimal(animal)
    46. printAnimal(&Dog{"小狗", "白色"})
    47. }

    嵌套interface

    1. package main
    2. type Animal interface {
    3. Mover
    4. Eater
    5. }
    6. type Mover interface {
    7. move()
    8. }
    9. type Eater interface {
    10. eat()
    11. }
    12. type Cat struct {
    13. }
    14. func (c *Cat) move() {
    15. }
    16. func (c *Cat) eat() {
    17. }
    18. func main() {
    19. var a Mover;
    20. a= &Cat{}
    21. a.move()
    22. }

    空接口

    1. package main
    2. import "fmt"
    3. //空接口可以接受任何类型的数据
    4. func aa(a interface{}){
    5. fmt.Println(a)
    6. }
    7. func main() {
    8. aa(1)
    9. aa(make(map[string]string))
    10. aa(make(map[string]interface{}))
    11. aa(make([]interface{},0))
    12. }