登录
首页 >  Golang >  Go问答

在多种情况下,开关类型的行为会有所变化

来源:stackoverflow

时间:2024-03-08 09:24:28 420浏览 收藏

本篇文章向大家介绍《在多种情况下,开关类型的行为会有所变化》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

任何人都可以解释为什么 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是一个interface{},它有类型和值,类型和值都为空,就会== nil;

publickey.(type) 是一个接口{},其类型为 ed25519.publickey ,值为 nil

有多种可能性的情况会改变它的类型:

如果我跑步:

case ed25519.publickey, *ecdsa.publickey:

公钥。(类型)

type:  
value: ked25519.publickey(nil)

publickey.(type) == nil(因为它有一个类型接口{})

如果我跑步:

case ed25519.publickey:

公钥。(类型)

type:  
value: ked25519.PublicKey(nil)

publickey.(type) != nil(因为它只有类型 ked25519.publickey)

理论要掌握,实操不能落!以上关于《在多种情况下,开关类型的行为会有所变化》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>