英文:
Change pointer to slice of type to another slice of another type
问题
var buf1 []Somestruct1
var buf2 []Somestruct2
var selected_buf interface{} // 需要声明为接口类型
changeme := 0
switch changeme {
case 0:
// 应该指向 buf1 以便在将来进行修改
selected_buf = &buf1
case 1:
// 应该指向 buf2 以便在将来进行修改
selected_buf = &buf2
}
// 使用和修改的示例
len := len(selected_buf.([]Somestruct1)) // 获取长度
selected_buf = append(selected_buf.([]Somestruct1), Somestruct1{}) // 根据指针选择 Somestruct1 或 Somestruct2 进行追加
我想重构一些代码,但是由于指针的问题,无论我选择如何实现,都会出现各种错误。之前类似这样的代码是可以工作的:
var newstruct Somestruct3
for i := range buf1 {
current := buf1[i]
if current.somefield == someint {
newstruct.somefield = ¤t
}
}
它可以正常工作。我不知道该怎么办。请帮帮我)
"版主,请友善一点 - 我正在使用网络差的手机打字。谢谢"
英文:
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
<br/>
I want to refactor some code, but cannot do it because the pointer gaves me variety of errors depending on how I choose to implement it. Previously something like that worked:
var newstruct Somestruct3
for i := range buf1 {
current := buf1[i]
if current.somefield == someint {
newstruct.somefield = &current
}
}
And it worked fine. idk what to do. pls help)
"moderators, please, be kind - I'm typing from the phone on the shitty network. thanks"
答案1
得分: 3
根据我所看到的,这两种类型将被合并为一种类型,因此可以进行的一种可能的工作是引入一个接口,并将可能的方法附加到该接口上。
type testinterface interface {
}
func main() {
var tmp []Somestruct1
var tmp2 []Somestruct2
var tmp3 []testinterface
tmp3 = append(tmp3, &Somestruct1)
tmp3 = append(tmp3, &Somestruct2)
}
英文:
As I see these two types are going to be merged into one type, so one possible work that can be done is to introduce an interface with possible methods and append it to that interface
type testinterface interface {
}
func main() {
var tmp []Somestruct1
var tmp2 []Somestruct2
var tmp3 []testinterface
tmp3 = append(tmp3, &Somestruct1)
tmp3 = append(tmp3, &Somestruct2)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论