登录
首页 >  Golang >  Go问答

改变指向切片的指针以适用于不同类型的切片

来源:stackoverflow

时间:2024-02-14 15:18:20 156浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《改变指向切片的指针以适用于不同类型的切片》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

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
    }
}

而且效果很好。我不知道该怎么办。请帮忙)

“版主,请客气一点 - 我正在用糟糕的网络上的手机打字。谢谢”


正确答案


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

type testinterface interface {
}

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

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

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>