对于具有多种可能性的情况,Switch类型表现不同



谁能解释一下为什么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)

相关内容

  • 没有找到相关文章

最新更新