Eson-Jia opened a new issue #315:
URL: https://github.com/apache/dubbo-go-samples/issues/315
报错的测试代码是基于 samples 中 master 分支中的 `context/triple/go-client 和 go-server`示例
进行了修改。
修改后客户端代码:
```go
package main
import (
"context"
"sync"
)
import (
"dubbo.apache.org/dubbo-go/v3/common/constant"
"dubbo.apache.org/dubbo-go/v3/common/logger"
"dubbo.apache.org/dubbo-go/v3/config"
_ "dubbo.apache.org/dubbo-go/v3/imports"
)
import (
"github.com/apache/dubbo-go-samples/api"
)
var grpcGreeterImpl = new(api.GreeterClientImpl)
func init() {
config.SetConsumerService(grpcGreeterImpl)
}
// export DUBBO_GO_CONFIG_PATH=
PATH_TO_SAMPLES/helloworld/go-client/conf/dubbogo.yml
func main() {
err := config.Load()
if err != nil {
panic(err)
}
logger.Info("start to test dubbo")
ctx := context.Background()
// set user defined context attachment, map value can be string or
[]string, otherwise it is not to be transferred
userDefinedValueMap := make(map[string]interface{})
userDefinedValueMap["key1"] = "user defined value 1"
userDefinedValueMap["key2"] = "user defined value 2"
userDefinedValueMap["key3"] = []string{"user defined value 3.1", "user
defined value 3.2"}
userDefinedValueMap["key4"] = []string{"user defined value 4.1", "user
defined value 4.2"}
ctx = context.WithValue(ctx, constant.AttachmentKey,
userDefinedValueMap)
//测试流式 rpc
logger.Info("start to test dubbo stream context")
request := &api.HelloRequest{
Name: "laurence",
}
stream, err := grpcGreeterImpl.SayHelloStream(ctx)
if err != nil {
logger.Error(err)
}
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
reply, err := stream.Recv()
if err != nil {
logger.Error(err)
}
logger.Infof("client stream received result: %v\n", reply)
}()
err = stream.Send(request)
if err != nil {
logger.Error(err)
}
logger.Infof("client stream send request: %v\n", request)
wg.Wait()
}
```
修改后服务端代码:
```go
package main
import (
"dubbo.apache.org/dubbo-go/v3/common/constant"
"dubbo.apache.org/dubbo-go/v3/common/logger"
"dubbo.apache.org/dubbo-go/v3/config"
_ "dubbo.apache.org/dubbo-go/v3/imports"
)
import (
"github.com/apache/dubbo-go-samples/api"
)
type GreeterProvider struct {
api.UnimplementedGreeterServer
}
func (s *GreeterProvider) SayHelloStream(svr
api.Greeter_SayHelloStreamServer) error {
attachments :=
svr.Context().Value(constant.AttachmentKey).(map[string]interface{})
logger.Infof("get triple attachment %v", attachments)
c, err := svr.Recv()
if err != nil {
return err
}
logger.Infof("Dubbo-go3 GreeterProvider recv 1 user, name = %s\n",
c.Name)
err = svr.Send(&api.User{
Name: "hello " + c.Name,
Age: 18,
Id: "123456789",
})
if err != nil {
return err
}
return nil
}
func main() {
config.SetProviderService(&GreeterProvider{})
if err := config.Load(); err != nil {
panic(err)
}
select {}
}
```
现象描述:
客户端发送 rpc 请求后,服务端会 在 `SayHelloStream` 函数第一行 panic: interface conversion:
interface {} is nil, not map[string]interface {}
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]