当前位置: > > > > 为什么私人成员不从 Cadence 活动传递?
来源:stackoverflow
2024-04-23 19:03:57
0浏览
收藏
今天给大家带来了《为什么私人成员不从 Cadence 活动传递?》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~
问题内容
我注意到,当我使用由公共和私有成员组成的结构时,cadence 活动不会复制(?)私有成员。
例如我有一个结构:
package foo type foo struct { name string publiclist []string privatelist []string } func newfoo() *foo { return &foo{ name: "test", publiclist: []string{"a", "b", "c"}, privatelist: []string{"one", "two"}, } } func (f *foo) showlists() { fmt.println("publiclist: ", f.publiclist, ", privatelist: ", f.privatelist) }
我还使用其他结构,注册为活动结构:
package activities type fooactivities struct{} func (a *fooactivities) newfoo(ctx context.context) (*foo.foo, error) { return foo.newfoo(), nil } func (a *fooactivities) showlists(ctx context.context, f *foo.foo) error { f.showlists() return nil }
我的工作流程通过以下方式调用这两个活动:
var f *foo.Foo workflow.ExecuteActivity(ctx, fooActivities.NewFoo).Get(ctx, &f) workflow.ExecuteActivity(ctx, fooActivities.ShowLists, f).Get(ctx, nil)
showlists
函数打印的结果:
公共列表:[a b c],私有列表:[]
为什么私有列表没有按预期初始化?这是错误还是功能?我在 cadence 文档中找不到这个问题的答案。
正确答案
Cadence(和 Temporal)默认使用 json.Marshal
进行序列化,并使用 json.Unmarshall
反序列化活动参数。它不会序列化私有字段。
一个可能的解决方法。
我认为这是由于反射无法复制未导出的字段造成的
今天关于《为什么私人成员不从 Cadence 活动传递?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!