H5W3
当前位置:H5W3 > go > 正文

【go】go代码疑惑,usb.(PhoneConnector) 是何意?

请教以下代码中一句: usb.(PhoneConnector) 是何意?有何作用?

源码如下:


package main
import (
"fmt"
)
type USB interface {
Name() string
Connector
}
type Connector interface {
Connect()
}
type PhoneConnector struct {
name string
}
func (pc PhoneConnector) Name() string {
return pc.name
}
func (pc PhoneConnector) Connect() {
fmt.Println("Connect:", pc.name)
}
func main() {
//var a USB
a := PhoneConnector{name: "Huawei-PhoneConnector"}
a.Connect()
Disconnect(a)
}
func Disconnect(usb USB) {
//  usb.(PhoneConnector) 这句不明白什么意思?有什么作用
if pc, ok := usb.(PhoneConnector); ok {
fmt.Println("pc is:", pc)
fmt.Println("ok is:", ok)
fmt.Println("Disconnected:", pc.name)
return
}
fmt.Println("Unknown device.")
}

运行结果:

Connect: Huawei-PhoneConnector
pc is: {Huawei-PhoneConnector}
ok is: true
Disconnected: Huawei-PhoneConnector

golang中something.(type)就是类型断言,通常interface使用时需要做类型断言,也就是判断something是否是括号中的type。
这里usb.(PhoneConnector)也就是判断usb是否是PhoneConnector类型

判断当前接口对象是否属于括号里的类
属于当前接口的对象.(类)

类型断言。

断言,判断类型的

对象的类型断言,类似于php的instanceof语法

type assertion -> 类型断言,https://golang.org/doc/effective_go.html#interface_conversions

回答

本文地址:H5W3 » 【go】go代码疑惑,usb.(PhoneConnector) 是何意?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址