谁能解释一下为什么if语句在这两种情况下表现不同?这对我来说没有意义。
package main
import (
"crypto/ecdsa"
"crypto/ed25519"
"fmt"
)
func main() {
var publicKey interface{}
publicKey = (ed25519.PublicKey)(nil)
switch k := publicKey.(type) {
case *ecdsa.PublicKey, ed25519.PublicKey:
if k == nil {
fmt.Println("It wont be printed")
}
default:
}
switch k := publicKey.(type) {
case ed25519.PublicKey:
if k == nil {
fmt.Println("It will be printed")
}
default:
}
}
publicKey是一个接口{},它有类型和值,类型和值都为空,则== nil;
publicKey.(type)是一个接口{},它的类型是ed25519.PublicKey
,值是nil
有多个可能的大小写将改变它的类型:
如果我运行:
case ed25519.PublicKey, *ecdsa.PublicKey:
publicKey。(类型)
type: <interface{}|ed25519.PublicKey>
value: ked25519.PublicKey(nil)
publicKey.(type) == nil(因为它有一个类型接口{})
如果我运行:
case ed25519.PublicKey:
publicKey。(类型)
type: <ked25519.PublicKey>
value: ked25519.PublicKey(nil)
publicKey.(type) != nil(因为它只有一个类型ked25519.PublicKey)