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

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

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

Go
慕田峪7331174 2023-04-24 16:03:31
我最近重组了我的代码,现在main包下有两个包:chain和api.在chain我定义了一些结构SomeStruct1和这些结构的SomeStruct2接口。SomeInterface下面是它chain/cli.go的样子。package chaintype CLI struct{}func (cli *CLI) Run() {    ...    gob.Register(SomeStruct1{})    gob.Register(SomeStruct2{})    ...}我api/api.go在里面放了另一个类似的地方。Run()gob.Register(chain.SomeStruct1{})main.go看起来像这样:package mainimport (    "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: name not registered for interface: "main.SomeStruct1"。当我将所有代码都放在一个包中时,这并没有发生main,我觉得SomeStruct1现在在chain包下很奇怪,但错误指的是main.SomeStruct1. 我哪里弄错了gob.Register()?
查看完整描述

1 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

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

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


查看完整回答
反对 回复 2023-04-24
  • 1 回答
  • 0 关注
  • 200 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信