Go语言--接口interface

接口 interface

  1. 定义:

    • interface是方法的集合;
    • interface是一种类型,并且是指针类型;
    • interface的作用在于多态的实现;
    • interface不能包含任何变量。
  2. //书写格式:
    type 接口名称 interface{
        method1(参数列表) 返回值列表
        method2(参数列表) 返回值列表
        。。。。。。
    }
    
  3. 使用注意事项:

    • 接口的使用不仅仅针对结构体,自定义类型、变量等都可以实现接口;
    • 任意结构体都隐式地实现了空接口;
    • 要实现一个接口,必须实现该接口里面的所有方法。
  4. 空接口

    /*
    Go 语言为了避免用户重复定义很多空接口,它自己内置了一个空接口,名字叫 interface{}
    
    空接口里面没有方法,其作用相当于 Java 的 Object 类型,可以容纳任意对象。
    */
    	fmt.Println("user:")
    	var user = map[interface{}]interface{}{
    		712:        18,
    		"address": "徐州",
    		5.2:        true,
    	}
    	fmt.Println(user)
    
  5. 接口嵌套:

    • 接口嵌套可理解为继承,子接口拥有父接口的所有方法;
    • 如果使用该子接口,必须将父接口和子接口的所有方法都实现。
  6. 类型转换:

    func main() {
    	var t interface{}
    
    	name := "小灰"
    	t = name 
    	x, ok := t.(int)
    	y, ok1 := t.(string)
    	fmt.Println(x, ok)
    	fmt.Println(y, ok1)
    }
    /*结果显示如下:
    0 false
    小灰 true
    -------------------------------------
    将接口转化为指定类型时,ok可省略,但是省略以后转化失败会报错。
    true表示转化成功,flase表示转化失败,并采用默认值。
    */
    

反射

  1. 反射比正常代码运行速度慢一到两个数量级。

    所以,对于一个项目中处于运行效率关键位置的代码,尽量避免使用反射特性。

  2. 值类型的变量是不可以通过反射来修改的,因此,

    在反射前,传参的时候需要将值变量转换成接口变量,值内容会被浅拷贝。

map

  1. map遍历的顺序是随机的。
  2. map的创建方式:
    • 通过字面值(直接{}内赋值)
    • 通过make函数,可以根据索引来赋值。
posted @ 2021-09-01 10:31  念~想  阅读(89)  评论(0)    收藏  举报