与私有接口比较

与私有接口比较,第1张

与私有接口比较

如前所述,您不能使用类型断言,因为您不能引用未导出的type

ssh.rsaPublicKey

使用

reflect
软件包可以实现您想要的一切。

由于

rsa.PublicKey
是的基础类型
ssh.rsaPublicKey
,因此可以将封装的 指针
key2
转换为
rsa.PublicKey
。一旦你获得
reflect.Value
你的
key2
,“导航”到

利用价值
Value.Elem()
。该值可转换为type的值
rsa.PublicKey
。您可以使用
Value.Convert()
“动态”将,在运行时将其转换为
rsa.PublicKey
。拥有后,您可以
reflect.DeepEquals()
用来进行比较,也可以手动进行比较。

它看起来像这样:

key1 := &rsa.PublicKey{N: big.NewInt(123), E: 10}key2, _ := ssh.NewPublicKey(&rsa.PublicKey{N: big.NewInt(123), E: 10})key2conv := reflect.ValueOf(key2).Elem().    Convert(reflect.TypeOf(rsa.PublicKey{})).Interface()// key2conf is an interface{}, wrapping an rsa.PublicKey// Comparision with DeepEqualfmt.Println(reflect.DeepEqual(*key1, key2conv))// Comparing manually:key22 := key2conv.(rsa.PublicKey)fmt.Println(key1.N.Cmp(key22.N)) // Int.Cmp() returns 0 if equalfmt.Println(key1.E == key22.E)

请注意,在手动比较时,比较

PublicKey.N
类型的字段
*big.Int
需要使用该
Int.Cmp()
方法,因为比较指针是比较内存地址,而不是指针值。如果两个值相等,则
Int.Cmp()
返回
0



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5126295.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存