Golang-interface(一 基本使用)(二)

2014-11-23 21:43:59 · 作者: · 浏览: 24
1, 2, 3) var I interface{} = slice if res, ok := I.([]int);ok { fmt.Println(res) //[1 2 3] }

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

func Sort(array interface{}, traveser Traveser) error {

    if array == nil {
        return errors.New(nil pointer)
    }
    var length int //数组的长度
    switch array.(type) {
    case []int:
        length = len(array.([]int))
    case []string:
        length = len(array.([]string))
    case []float32:
        length = len(array.([]float32))

    default:
        return errors.New(error type)
    }

    if length == 0 {
        return errors.New(len is zero.)
    }

    traveser(array)

    return nil
}

通过使用.(type)方法可以利用switch来判断接口存储的类型。

小结: 查询接口所指向的对象是否为某个类型的这种用法可以认为是接口查询的一个特例。接口是对一组类型的公共特性的抽象,所以查询接口与查询具体类型区别好比是下面这两句问话的区别:

你是医生么?
是。
你是莫莫莫

第一句问话查询的是一个群体,是查询接口;而第二个问句已经到了具体的个体,是查询具体类型。

除此之外利用反射也可以进行类型查询,会在反射中做详细介绍。

参考: http://research.swtch.com/interfaces