1.7.2 接口的查询

  1. 接口查询在程序运行时进行,查询是否成功,也要在运行时期才能确定

  2. 他不香接口的赋值,编译器只需要通过动态类型检查即可判断赋值是否可行

  3. 在Go语言中,可以询问他指向的对象是否是某个类型

    var filewriter Writer = ...
    if filew, ok := filewriter.(*File); ok {
        // ...
    }

    上面if语句判断filewriter接口指向的对象实例是否为*File类型,如果是,则执行特定代码

  4. 这次,if语句会判断接口I所指向的对象是否是[]int类型,如果是,则输出切片中的元素

    slice := make([]int, 0)
    slice = append(slice, 1, 6, 8)
    var I interface{} = slice
    if res, ok := I.([]int); ok {
        fmt.Println(res) //[1 6 8]
        fmt.Println(ok)
    }
  5. 通过使用"接口类型.(type)"形式,加上switch...case语句来判断接口存储的类型

    func Len(array interface{}) int {
    	var length int // 数组的长度
    
    	if array == nil {
    		length = 0
    	}
    
    	switch array.(type) {
    	case []int:
    		length = len(array.([]int))
    	case []string:
    		length = len(array.([]string))
    	case []float32:
    		length = len(array.([]float32))
    	default:
    		length = 0
    	}
    	fmt.Println(length)
    	
    	return length
    }

Last updated