慢慢919 2023-04-06 15:42 采纳率: 0%
浏览 50

go版本导致的 gob.Register() 问题

在go1.19版本中,gob.Register(elliptic.P256())会报错
报错信息:gob: type elliptic.p256Curve has no exported fields
请问在不换版本的情况下如何解决这个问题

  • 写回答

1条回答 默认 最新

  • 桃宝护卫队 2023-04-09 10:16
    关注

    以下回答引用自chatGpt, 有用的话,请采纳哇,这对我很重要!!!
    从 Go 1.17 版本开始,elliptic.P256() 的类型被修改为 elliptic.p256Curve,其字段不再被导出。因此,在 Go 1.19 中,使用 gob.Register(elliptic.P256()) 将会导致编译错误。

    为了解决这个问题,您可以手动实现 gob.GobEncodergob.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 中运行同一段代码,建议您使用条件编译来进行版本适配,以确保代码的兼容性。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月6日

悬赏问题

  • ¥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键失灵