提问人:Eugene Zolotuhin 提问时间:3/31/2023 更新时间:3/31/2023 访问量:68
将指向类型切片的指针更改为另一种类型的另一个切片
Change pointer to slice of type to another slice of another type
问:
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 = ¤t
}
}
而且效果很好。idk 怎么办。 请帮忙)
“版主,请善待 - 我正在用手机在糟糕的网络上打字。谢谢”
答:
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”,但它已经改变了它的逻辑。
上一个:Go 内存和分配管理
下一个:追加到指针切片
评论