将指向类型切片的指针更改为另一种类型的另一个切片

Change pointer to slice of type to another slice of another type

提问人:Eugene Zolotuhin 提问时间:3/31/2023 更新时间:3/31/2023 访问量:68

问:

var buf1 []Somestruct1
var buf2 []Somestruct2

var selected_buf //pointer, needs to be declared. I used *int, []interface{}, *[]interface{}, but nothing seems to work so far

changeme := 0
switch changeme {
    case 0:
        // should point to buf1 to mutate it in future
        selected_buf = &buf1
    case 1:
        // should point to buf2 to mutate it in future
        selected_buf = &buf2
}

// examples of use and mutation
len(selected_buf)
selected_buf = append(selected_buf, Somestruct1) // or Somestruct2 depending on pointer

我想重构一些代码,但无法做到,因为指针会给我带来各种错误,具体取决于我选择如何实现它。以前这样的事情是有效的:
var newstruct Somestruct3
for i := range buf1 {
    current := buf1[i]
    if current.somefield == someint {
        newstruct.somefield = &current
    }
}

而且效果很好。idk 怎么办。 请帮忙)

“版主,请善待 - 我正在用手机在糟糕的网络上打字。谢谢”

Go 指针 切片

评论

1赞 Burak Serdar 3/31/2023
你正在尝试做的事情是行不通的。您要解决的实际问题是什么?为什么需要这样做?很可能还有其他方法可以实现。
0赞 Eugene Zolotuhin 3/31/2023
@BurakSerdar是的,这有点像“动态”更改变量的类型。我们知道静态类型的语言是不可能的。我找到了一个如何重构的解决方案。无论如何,Somestruct1 和 Somestruct2 都是连接的,所以第一个循环,第二个嵌套循环。还行。目前)

答:

3赞 ali heydarabadii 3/31/2023 #1

正如我所看到的,这两种类型将合并为一个类型,因此可以完成的一项可能的工作是引入一个具有可能方法的接口并将其附加到该接口

type testinterface interface {
}

func main() {
    var tmp []Somestruct1
    var tmp2 []Somestruct2
    var tmp3 []testinterface

    tmp3 = append(tmp3, &Somestruct1)
    tmp3 = append(tmp3, &Somestruct2)
}

评论

0赞 Eugene Zolotuhin 3/31/2023
谢谢,下次我会尝试的。我处理的文件位于 github.com/zhexyez/go-build-html/tree/master .目前还没有重构。找到案例“R”,但它已经改变了它的逻辑。