为了账号安全,请及时绑定邮箱和手机立即绑定

恐慌:采空区:类型 elliptic.p256Curve 没有导出字段

恐慌:采空区:类型 elliptic.p256Curve 没有导出字段

Go
湖上湖 2023-02-14 17:46:22
当我遇到有关 gob Serialize 的问题时,我正在尝试构建一个区块链项目。我有一个使用 elliptic.P256() Curve 结构的结构钱包,当我尝试序列化钱包时,出现了没有导出字段的错误。真的希望得到一些帮助。有我的代码。const walletFile = "Wallets.dat"type Wallets struct {    WalletsMap map[string]*Wallet}type Wallet struct {    PrivateKey ecdsa.PrivateKey    PublicKey []byte}func (w *Wallets) SaveWallets() {    var content bytes.Buffer    gob.Register(elliptic.P256())    encoder := gob.NewEncoder(&content)    err := encoder.Encode(&w)    if err != nil {        log.Panic(err)    }    err = ioutil.WriteFile(walletFile, content.Bytes(), 0644)    if err != nil {        log.Panic(err)    }}func NewWallets() (*Wallets, error) {    if _, err := os.Stat(walletFile); os.IsNotExist(err) {        wallets := &Wallets{}        wallets.WalletsMap = make(map[string]*Wallet)        return wallets, err    }    fileContent, err := ioutil.ReadFile(walletFile)    if err != nil {        log.Panic(err)    }    var wallets Wallets    gob.Register(elliptic.P256())    decoder := gob.NewDecoder(bytes.NewReader(fileContent))    err = decoder.Decode(&wallets)    if err != nil {        log.Panic(err)    }    return &wallets, nil}问题2022/09/18 19:42:33 gob: type elliptic.p256Curve has no exported fieldspanic: gob: type elliptic.p256Curve has no exported fields
查看完整描述

3 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

将您的 Go 版本更改为1.18.10 for less。由于最新的 Go 版本,即 1.19.5,我遇到了同样的问题

我们需要以旧方式降级 Go 版本,因为 Go 不提供像花哨的版本管理器这样的东西。

降级Go版本的步骤:

  1. 卸载现有的 Go 版本

    要卸载 Go,请找到 Go 在您系统上的位置。

    $where go此命令将在用户路径中定位程序文件。

    要卸载,请删除/usr/local/go您在上一个命令中作为输出收到的目录或源目录。使用命令$ sudo rm -rf /usr/local/go删除Go目录。

    确认运行命令,如果成功删除Go目录,$ go version系统会提示“command go not found” 。

  2. 安装新版本

    转到下载页面并下载与您的操作系统和体系结构兼容的版本发布(选择安装程序而不是存档以方便您自己使用)。解压缩并解压缩软件包安装程序,新的 Go 版本现在已安装在您的系统中。

之后,您需要重新启动终端才能使更改生效。要检查您是否已成功安装 Go,请运行命令$go version。该命令打印已安装的 Go 版本。还要确保GOROOT并且GOPATH没有改变。


查看完整回答
反对 回复 2023-02-14
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

您在这里似乎想做的是序列化包中的 P256 曲线crypto/elliptic。问题是该P256()函数返回一个名为elliptic.Curve.

此错误告诉您的是 的基础类型elliptic.Curve(在本例中为elliptic.p256Curve)没有任何导出的字段(以首字母大写命名)。使用的Goreflectencoding/gob仅适用于导出的字段。

您可能想尝试使用crypto/ellipticMarshal()函数GenerateKey()


查看完整回答
反对 回复 2023-02-14
?
慕的地10843

TA贡献1785条经验 获得超8个赞

它在 Go 的 1.9.* 版本中存在问题。例如,只需安装 1.8.7。一切都会在这之后正常工作)



查看完整回答
反对 回复 2023-02-14
  • 3 回答
  • 0 关注
  • 333 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号