Golang的类型断言

  类型断言即判断一个变量是不是某个类型的实例,这个经常用在判断接口的类型,基本的格式:

y, ok := x.(type)

  上面的语句用于判断变量x是不是type类型,有两种结果:

    1. x是type类型的变量,那么返回x的副本赋值给y,ok的值为true
    2. x不是type类型的变量,那么返回一个空的stuct,ok的值为false

  注意判断x是不是type类型的变量时,那么  type类型的结构(struct)  就必须实现  x类型的接口,否则进行类型断言是不合法的。

  看一个完整的示例:

package main

import "fmt"

type human interface {
say()
}
type stu struct {
name string
} func (s stu) say() {
fmt.Println("his name is ", s.name)
}
func hide(h human) {
//进行类型断言
//前提是stu的结构类型(struct)必须实现 h类型的接口
if p, ok := h.(stu); ok {
fmt.Print("是stu的结构类型 ")
fmt.Println(p.name, ok)
} else {
fmt.Println("不是stu的结构类型")
}
}
func main() {
var h human
h = stu{name: "xyz"}
h.say()
hide(h)
}

  可以在进行类型断言的func那里传入一个空接口(空接口本身没有任何方法,则所有结构都实现了空接口,此时空接口类似其他语言中的超类Object),所以可以有更多的类型断言,根据传入类型进行不同操作,还可以使用 switch   type ,

  示例如下:

func hide(x interface{}) {
switch v := x.(type) {
case stu:
fmt.Println(v.name)
default:
fmt.Println("none")
}
}

  注意上面的是 x.(type),并没有指定type类型,反而让系统去猜x到底是什么样的类型。

  

上一篇:常见的LINUX发行版安装libiconv库方法


下一篇:Robot Framework中经常用的第三方库的安装方法