1.1 断言基本介绍
由于接口是一般类型,不知道具体类型,如果要转换成具体类型,就需要使用类型断言,具体如下:
上面代码说明:
在进行类型断言时,如果类型不匹配,就会报panic,因此进行此类型断言时,要确保原来的空接口指向就是断言的类型。
如何在进行断言时,带上检测机制,如果成功就ok,不成功也不要报panic。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| package main
import "fmt"
type Usb interface { Start() Stop() }
type Phone struct { name string }
func (p Phone) Start() { fmt.Println("手机开始工作。。。") } func (p Phone) Stop() { fmt.Println("手机停止工作。。。") }
func (p Phone) Call() { fmt.Println("手机 在打电话..") }
type Camera struct { name string }
func (c Camera) Start() { fmt.Println("相机开始工作。。。") } func (c Camera) Stop() { fmt.Println("相机停止工作。。。") }
type Computer struct { }
func (computer Computer) Working(usb Usb) { usb.Start() if phone, ok := usb.(Phone); ok { phone.Call() } usb.Stop() }
func main() { var usbArr [3]Usb usbArr[0] = Phone{"vivo"} usbArr[1] = Phone{"小米"} usbArr[2] = Camera{"尼康"}
var computer Computer for _, v := range usbArr { computer.Working(v) fmt.Println() } }
|