Golang中switch i.(type)判断结果与reflect.TypeOf返回类型不一致问题
Go类型判断结果不一致原因说明
byte与uint8是等价类型:Go语言预声明了byte作为uint8的类型别名,底层实现完全一致,仅为不同使用场景下的不同名称,对应的切片类型[]byte和[]uint8本质是完全相同的类型。reflect.TypeOf输出[]uint8的原因:reflect包输出类型名时,默认展示类型的原生定义名称,因此会显示底层原始类型[]uint8,而非别名写法[]byte。- type switch匹配
[]byte分支的原因:类型断言与type switch的匹配逻辑可识别等价别名类型,由于[]byte和[]uint8完全等价,因此[]uint8类型的变量可以正常匹配[]byte的分支。
你可以自行验证:将type switch的分支替换为case []uint8,代码运行逻辑完全一致,同样会匹配成功输出对应内容。
内容的提问来源于stack exchange,提问作者Khanakia
相关产品推荐
相关产品推荐

