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

yongqiang
  • 162

请教以下代码中一句: 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
回复
阅读 3.1k
6 个回答

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

悲惨的大爷
  • 2.1k

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

类型断言。

断言,判断类型的

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

douglarek
  • 448
宣传栏