亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 244 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號