当前位置: > > > > 为什么私人成员不从 Cadence 活动传递?
为什么私人成员不从 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 活动传递?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在米云公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!
