为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕无忌1623718 2023-02-06 18:44:15
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 中是什么意思?编辑:或者至少不是意味着我可以从蟒蛇的例子)。
查看完整描述

1 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

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 序列化相关的运行时错误?!)


查看完整回答
反对 回复 2023-02-06
  • 1 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信