gpt4 book ai didi

Golang 界面 slice

转载 作者:数据小太阳 更新时间:2023-10-29 03:14:04 27 4
gpt4 key购买 nike

我正在尝试遍历接口(interface)片段以通过 id 查找我的特定结构并更改属性。

type A struct {
ID ID
Steps []Step
}

type Step interface{}

type B struct {
ID ID
}

type C struct {
ID ID
}

func (s *A) findStepByID(id ID) (Step, error) {
for index, step := range s.Steps {
switch stepType := step.(type) {
case A:
if stepType.ID == id {
return step, nil
}
case B:
if stepType.ID == id {
return step, nil
}
default:
return nil, errors.New("no step found")
}
}
return nil, errors.New("no step found")
}

当我找到我的结构时,例如 B 然后我将设置 B.ID = xy

最佳答案

findStepByID 函数返回一个接口(interface){}。如果您想为 ID 分配一个新值,您必须将其显式转换为一个类型

这里假设您按原样使用 case 来更新结果并使用更新后的值。您可以通过两种方式进行操作

  1. 不要使用空接口(interface)interface{},而是使用定义了函数 UpdateID(ID) 的接口(interface)

  2. 使用类型开关,内部开关只做更新

我不建议第二个,因为它有范围问题

关于Golang 界面 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42159412/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com