..
assert type
遇到的代码如下
// RPCServiceID returns the Service ID for the given RPCAPI object.
func RPCServiceID(rpcSvc interface{}) string {
switch rpcSvc.(type) {
case *ClusterRPCAPI:
return "Cluster"
case *PinTrackerRPCAPI:
return "PinTracker"
case *IPFSConnectorRPCAPI:
return "IPFSConnector"
case *ConsensusRPCAPI:
return "Consensus"
case *PeerMonitorRPCAPI:
return "PeerMonitor"
default:
return ""
}
}
其中 rpcSvc.(type)
在 golang 中叫做 assert type
,我理解就是类型转换的意思。
调用端代码是这样的
cl := &ClusterRPCAPI{c}
RPCServiceID(cl)
其他例子1
var i interface{} = "hello world"
str := i.(string) // 1.接口i是string类型,会将"hello world"赋值给str
fmt.Println(str)
s, ok := i.(string) // 2.接口类型是string,会将"hello world"赋值给s,并且ok=true
fmt.Println(s, ok)