It can also used to transfer base-type of golang, even
You can get dubbo attachment in this way:
ctxAtta := ctx.Value(constant.DubboCtxKey("attachment")).(map[string]interface{})
rsp := ContextContent{
Path: ctxAtta["path"].(string),
InterfaceName: ctxAtta["interface"].(string),
DubboVersion: ctxAtta["dubbo"].(string),
LocalAddr: ctxAtta["local-addr"].(string),
RemoteAddr: ctxAtta["remote-addr"].(string),
}
Client end
As demo in go-client/cliemt.go shows
// create requset context rspContent := &pkg.ContextContent{} // create attachment, which must be map[string]interface{} atta := make(map[string]interface{}) // add fields you like atta["string-value"] = "string-demo" atta["int-value"] = 1231242 // make sure the UserDefined Pkg is registered to hessian2 atta["user-defined-value"] = pkg.ContextContent{InterfaceName: "test.interface.name"} // invoke with your context reqContext := context.WithValue(context.Background(), constant.DubboCtxKey("attachment"), atta) err := userProvider.GetContext(reqContext, []interface{}{"A001"}, rspContent) if err != nil { gxlog.CError("error: %v\n", err) os.Exit(1) return } gxlog.CInfo("response result: %+v\n", rspContent)
Server end:
As demo in go-server/server.go shows
// get attachment from ctx ctxAtta := ctx.Value(constant.DubboCtxKey("attachment")).(map[string]interface{}) // get user defined struct from attachment userDefinedval := ctxAtta["user-defined-value"].(*ContextContent) // get value you sent intValue := ctxAtta["int-value"].(int64),
Pls. refer to HOWTO.md under the root directory to run this sample.