如前所述,您不能使用类型断言,因为您不能引用未导出的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。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)