为什么不从Cadence活动传递private成员?



我注意到,当我使用由公共和私有成员组成的结构时,那么私有成员不会被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函数打印的结果:

PublicList: [A B C], privateList: []

为什么私有列表没有按预期初始化?这是bug还是特性?我在Cadence文档中找不到这个问题的答案。

Cadence(和Temporal)默认使用json.Marshal序列化活动参数,json.Unmarshall反序列化活动参数。它不序列化私有字段。

这是一个可能的解决方案。

我认为这是由于反射不能复制未导出的字段

相关内容

  • 没有找到相关文章

最新更新