• golang类型断言


    什么是类型断言

    因为接口是一般类型,不知道具体类型,如果要转成具体类型就要使用类型断言

    先看简单的(报错的代码)

    package main
    
    import "fmt"
    
    type Point struct {
    	x int
    	y int
    }
    
    func main() {
    	var a interface{}
    	p := Point{1,2}
    	a =p
    	var b Point
    	b = a//这里会报错
    	fmt.Println(b)
    }
    

     用类型断言,没用类型断言无法确定a就是Point类型:

    package main
    
    import "fmt"
    
    type Point struct {
    	x int
    	y int
    }
    
    func main() {
    	var a interface{}
    	p := Point{1,2}
    	a =p
    	var b Point
    	b = a.(Point)
    	fmt.Println(b)
    }
    

     再看一段:

    package main
    
    import "fmt"
    
    type Usb interface {
    	Start()
    	Stop()
    }
    
    type Phone struct {
    	name string
    }
    func (this Phone) Start() {
    	fmt.Println("the phone is start working ")
    }
    func (this Phone) Call() {
    	fmt.Println("calling..")
    }
    func (this Phone) Stop() {
    	fmt.Println("the phone is stop working")
    }
    
    type Camera struct {
    	name string
    }
    func (this Camera) Start() {
    	fmt.Println("Camera is start working")
    }
    func (this Camera) Stop() {
    	fmt.Println("Camera is stop")
    }
    
    type Computer struct {
    	
    }
    
    func (this Computer) Working(usb Usb)  {
    	usb.Start()
    	if phone,ok := usb.(Phone); ok {
    		phone.Call()
    	}
    	usb.Stop()
    }
    
    func main() {
    	c :=Computer{}
    	phone1 :=Phone{"小米"}
    	phone2 := Phone{"华为"}
    	camera := Camera{"索尼"}
    	var usbarr [3]Usb
    	usbarr[0] = phone1
    	usbarr[1] = phone2
    	usbarr[2] = camera
    	for _,v:= range usbarr {
    		c.Working(v)
    	}
    }
    

     运结果:

  • 相关阅读:
    zabbix--5.0.2部署手册
    ssh远程连接出现WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
    centos7自带python2.7.5安装pip
    Nginx代理kibana方法2
    安洵杯Laravel反序列化非预期+POP链挖掘
    vue笔记:vue组件的生命周期
    通用测试用例编写
    Vue笔记:Vue中使用mockjs
    Python map、reduce、filter函数用法
    Python如何实现异步IO
  • 原文地址:https://www.cnblogs.com/cfc-blog/p/10392776.html
Copyright © 2020-2023  润新知