在go1.19版本中,gob.Register(elliptic.P256())会报错
报错信息:gob: type elliptic.p256Curve has no exported fields
请问在不换版本的情况下如何解决这个问题
![](https://profile-avatar.csdnimg.cn/default.jpg!4)
go版本导致的 gob.Register() 问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 桃宝护卫队 2023-04-09 10:16关注
以下回答引用自chatGpt, 有用的话,请采纳哇,这对我很重要!!!
从 Go 1.17 版本开始,elliptic.P256()
的类型被修改为elliptic.p256Curve
,其字段不再被导出。因此,在 Go 1.19 中,使用gob.Register(elliptic.P256())
将会导致编译错误。为了解决这个问题,您可以手动实现
gob.GobEncoder
和gob.GobDecoder
接口来自定义elliptic.CurveParams
的编码和解码过程,然后将自定义的编码解码函数注册给 Gob。例如:goCopy codetype P256Curve struct{} func (P256Curve) GobEncode() ([]byte, error) { return []byte("P-256"), nil } func (P256Curve) GobDecode(data []byte) error { if string(data) != "P-256" { return errors.New("invalid data for P256Curve") } return nil } func init() { gob.Register(P256Curve{}) }
然后您可以使用
P256Curve{}
代替elliptic.P256()
来进行编码和解码。另外,如果您需要在多个版本的 Go 中运行同一段代码,建议您使用条件编译来进行版本适配,以确保代码的兼容性。
解决评论 打赏 举报无用 1
悬赏问题
- ¥15 metadata提取的PDF元数据,如何转换为一个Excel
- ¥15 关于arduino编程toCharArray()函数的使用
- ¥100 vc++混合CEF采用CLR方式编译报错
- ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
- ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
- ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
- ¥50 如何openEuler 22.03上安装配置drbd
- ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
- ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
- ¥15 Windows11, backspace, enter, space键失灵