登录
首页 >  Golang >  Go问答

gob.注册名称未在另一个包中注册接口

来源:stackoverflow

时间:2024-04-11 22:30:36 485浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《gob.注册名称未在另一个包中注册接口》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

我最近重组了我的代码,现在 main 包下有两个包:chainapi

chain中,我定义了一些结构体somestruct1somestruct2以及这些结构体的接口someinterface。以下是 chain/cli.go 的样子。

package chain

type cli struct{}

func (cli *cli) run() {
    ...
    gob.register(somestruct1{})
    gob.register(somestruct2{})
    ...
}

还有另一个类似的 api/api.gorun() 内我放置了 gob.register(chain.somestruct1{})

main.go 看起来像这样:

package main

import (
    "myproj/api"
    "myproj/chain"
)

func main() {
    // I have also tried the following lines.
    // gob.Register(chain.SomeStruct1{})
    // gob.Register(chain.SomeStruct2{})
    go api.Run()

    cli := chain.CLI{}
    cli.Run()
}

但是,我在运行时收到错误 gob:名称未注册接口:“main.somestruct1”。当我将所有代码放在一个 main 包中时,这种情况并没有发生,而且我觉得很奇怪,somestruct1 现在位于 chain 包下,但错误引用了 main.somestruct1。我在哪里弄错了 gob.register()


解决方案


我无法完全解决问题,我认为原因是 chain.SomeStruct1 在运行时以某种方式被识别为名称 main.SomeStruct1,而它是使用内部名称 main.SomeStruct1 注册的。

因此,我现在的解决方法是使用 gob.RegisterName("main.SomeStruct1", chain.SomeStruct1)

今天关于《gob.注册名称未在另一个包中注册接口》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>