Golang基础-十二、接口-《Golang,Go,Go,Go学习笔记》

admin 2026-03-24 10:11:09 编程 来源:ZONE.CI 全球网 0 阅读模式
  • 接口
  • 空接口
  • 接口嵌套
  • 接口断言

    接口

    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. }
    评论:0   参与:  0