golang类型断言
Posted cfc-blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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) } }
以上是关于golang类型断言的主要内容,如果未能解决你的问题,请参考以下文章