因此,我正在使用類似于以下的代碼,并且無法讓 RPC 在 FooHolder 中工作,它包含滿足接口的對象。我可能遺漏了一些東西,但看起來它應該可以工作 - 使用反射包它可以正確識別類型但是當函數返回時出現問題......package mainimport ( "log" "net" "net/rpc" "net/rpc/jsonrpc" "reflect")type FooInterface interface { DoTheBartman(in *string, out *string) error DoThis(in *[]string, out *[]string) error NoProblems(in *int, out *int) error}type Foo struct { wibble string}func (f *Foo) DoTheBartman(in *string, out *string) error { log.Println("do the bartman") *out = "^^[ " + *in + "]^^" return nil}func (f *Foo) DoThis(in *[]string, out *[]string) error { log.Println("Doing this") log.Println("Type in - ", reflect.TypeOf(in)) log.Println("Type *in - ", reflect.TypeOf(*in)) log.Println("Type out - ", reflect.TypeOf(out)) log.Println("Type *out - ", reflect.TypeOf(*out)) *out = append(*in, "Hello") return nil}type FooHolder struct { TheFoos []FooInterface}func (fh *FooHolder) GetFoos(in *[]Foo, out *[]Foo) error { log.Println("Getting Foos...") log.Println("Type in - ", reflect.TypeOf(in)) log.Println("Type *in - ", reflect.TypeOf(*in)) log.Println("Type out - ", reflect.TypeOf(out)) log.Println("Type *out - ", reflect.TypeOf(*out)) return nil // This fails but with a nil... what's up with that.}
1 回答

喵喔喔
TA貢獻1735條經驗 獲得超5個贊
這是拋出該錯誤的行:https : //github.com/golang/go/blob/master/src/net/rpc/jsonrpc/client.go#L89
它是客戶端,如果c.resp.Error != nil || c.resp.Result == nil
.
現在你沒有返回任何錯誤,所以問題不在這里。
我相信問題在于您沒有設置任何結果。GetFoos
使out
指針為零。設置out
為非零值,它應該可以工作。
- 1 回答
- 0 關注
- 211 瀏覽
添加回答
舉報
0/150
提交
取消