Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gob.未为另一个包中的接口注册注册表名_Go_Gob_Go Interface - Fatal编程技术网

gob.未为另一个包中的接口注册注册表名

gob.未为另一个包中的接口注册注册表名,go,gob,go-interface,Go,Gob,Go Interface,我最近重组了我的代码,现在在main包下有两个包:chain和api 在chain中,我为这些结构定义了几个结构SomeStruct1,SomeStruct2和一个接口SomeInterface。以下是chain/cli.go的外观 package chain type CLI struct{} func (cli *CLI) Run() { ... gob.Register(SomeStruct1{}) gob.Register(SomeStruct2{})

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

chain
中,我为这些结构定义了几个结构
SomeStruct1
SomeStruct2
和一个接口
SomeInterface
。以下是
chain/cli.go
的外观

package chain

type CLI struct{}

func (cli *CLI) Run() {
    ...
    gob.Register(SomeStruct1{})
    gob.Register(SomeStruct2{})
    ...
}
还有另一个类似的
api/api.go
where-in
Run()
I-put
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:name未为接口注册:“main.SomeStruct1”
。当我把所有代码都放在一个
main
包中时,这种情况并没有发生,我觉得
SomeStruct1
现在在
chain
包下很奇怪,但错误指的是
main.SomeStruct1
。我在哪里出错了
gob.Register()

我还不能完全解决这个问题,我认为原因是
链。SomeStruct1
在运行时以某种方式被识别为具有名称
main.SomeStruct1
,而它是使用内部名称
main.SomeStruct1
注册的


因此,我现在有一个解决方法是使用
gob.RegisterName(“main.SomeStruct1”,chain.SomeStruct1)

我无法完全解决这个问题,我认为原因是
链。SomeStruct1
在运行时不知何故被识别为具有名称
main.SomeStruct1
,而它是使用内部名称
main.SomeStruct1
注册的


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

尝试将
go.Register()
语句放在
init()
函数中,将
gob.Register()
放在
init()
中不起作用。我还尝试将gob.Register()放在decoder.Decode()前面的行上,但相同的错误仍然存在。我认为根本的问题是
chain.someStruct1
不知何故被标识为
main.someStruct1
。作为一种解决方法,我现在使用gob.RegisterName(“main.someStruct1”,chain.someStruct1),目前一切似乎都很好。我建议您将解决方案作为答案发布,然后批准它。otherstry将
go.Register()
语句放在
init()
functionput
gob.Register()
init()中可能很有用。我还尝试将gob.Register()放在decoder.Decode()前面的行上,但相同的错误仍然存在。我认为根本的问题是
chain.someStruct1
不知何故被标识为
main.someStruct1
。作为一种解决方法,我现在使用gob.RegisterName(“main.someStruct1”,chain.someStruct1),目前一切似乎都很好。我建议您将解决方案作为答案发布,然后批准它。它可能对其他人有用