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
阅读 4k
6 个回答

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

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

类型断言。

断言,判断类型的

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题