zoukankan      html  css  js  c++  java
  • 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到底是什么样的类型。

      

  • 相关阅读:
    pixi.js 简单交互事件(点击、缩放、平移)
    w3school
    并发(Concurrent)与并行(Parallel)的区别
    CTime获得当前电脑时间
    NX二次开发-UFUN获得体的表面积,体积,重心等UF_MODL_ask_mass_props_3d
    Jvm故障问题排查以及Jvm调优总结
    jmap命令详解----查看JVM内存使用详情
    jstack命令解析
    年轻带Young GC算法示意图
    【JVM】jstat命令详解---JVM的统计监测工具
  • 原文地址:https://www.cnblogs.com/-beyond/p/8668389.html
Copyright © 2011-2022 走看看