使用 Go 覆盖 AWS CDK 中的 AvailabilityZones(接口中的函数)

Stack.AvailabilityZones的文档说:


// To specify a different strategy for selecting availability zones override this method.

AvailabilityZones() *[]*string

这是我尝试执行此操作的代码:


stack := awscdk.NewStack(scope, &id, &sprops)

stack.AvailabilityZones = func() *[]*string {      // this is line 22

    return &[]*string{jsii.String("us-west-1a")}

}

但是,我收到错误:


[andrew@localhost cdk]$ go run vpc.go common.go 

./vpc.go:22:2: cannot assign to stack.AvailabilityZones (value of type func() *[]*string)

我应该怎么做?


我不确定我是否犯了一个愚蠢的错误,或者我是否需要做一些完全不同的事情(“覆盖”在不是 OO 的 go 中是什么意思?编辑:或者至少不是意味着我可以从蟒蛇的例子)。


慕无忌1623718
浏览 130回答 1
1回答

HUX布斯

Go 有一种继承和“覆盖”方法的方法。您通过在结构中“嵌入”另一种类型(您没有命名类型)来继承;请参阅:Go“继承”- 在结构中使用匿名类型作为方法参数然后,您的结构将继承嵌入式类型的所有方法。您可以通过直接在结构上声明它们来覆盖单个的。用一个简化的例子,它看起来像:type MyStack struct {    awscdk.Stack}func (s *MyStack) AvailabilityZones() *[]string {    return &[]string{"foo", "bar"}}func f() {    // ...    stack := awscdk.NewStack(scope, &id, &sprops)    myStack := &MyStack{Stack: stack}    fmt.Println(myStack.AvailabilityZones())}编辑:这实际上对我有用(andrew cooke)(但没有解决我更大的问题,所以没有深入测试)type ZoneStack struct {    awscdk.Stack}func (stack *ZoneStack) AvailabilityZones() *[]*string {    return &[]*string{jsii.String("us-west-1a")}}...zstack := ZoneStack{}awscdk.NewStack_Override(&zstack, scope, &id, &sprops)(上面的原始答案编译,但给出似乎与 JS 序列化相关的运行时错误?!)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go