Go语言--接口interface
接口 interface
-
定义:
- interface是方法的集合;
- interface是一种类型,并且是指针类型;
- interface的作用在于多态的实现;
- interface不能包含任何变量。
-
//书写格式: type 接口名称 interface{ method1(参数列表) 返回值列表 method2(参数列表) 返回值列表 。。。。。。 } -
使用注意事项:
- 接口的使用不仅仅针对结构体,自定义类型、变量等都可以实现接口;
- 任意结构体都隐式地实现了空接口;
- 要实现一个接口,必须实现该接口里面的所有方法。
-
空接口
/* Go 语言为了避免用户重复定义很多空接口,它自己内置了一个空接口,名字叫 interface{} 空接口里面没有方法,其作用相当于 Java 的 Object 类型,可以容纳任意对象。 */ fmt.Println("user:") var user = map[interface{}]interface{}{ 712: 18, "address": "徐州", 5.2: true, } fmt.Println(user) -
接口嵌套:
- 接口嵌套可理解为继承,子接口拥有父接口的所有方法;
- 如果使用该子接口,必须将父接口和子接口的所有方法都实现。
-
类型转换:
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表示转化失败,并采用默认值。 */
反射
-
反射比正常代码运行速度慢一到两个数量级。
所以,对于一个项目中处于运行效率关键位置的代码,尽量避免使用反射特性。
-
值类型的变量是不可以通过反射来修改的,因此,
在反射前,传参的时候需要将值变量转换成接口变量,值内容会被浅拷贝。
map
- map遍历的顺序是随机的。
- map的创建方式:
- 通过字面值(直接{}内赋值)
- 通过make函数,可以根据索引来赋值。
浙公网安备 33010602011771号