登录
首页 >  Golang >  Go问答

将结构体切片附加到另一个结构体中

来源:stackoverflow

时间:2024-04-08 16:33:32 489浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《将结构体切片附加到另一个结构体中》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

我是 golang 新手,正在尝试将结构体切片的内容附加到另一个实例中。数据被附加,但在方法外部不可见。下面是代码。

package somepkg

import (
    "fmt"
)

type somestruct struct {
    name  string
    value float64
}

type somestructs struct {
    structinsts []somestruct
}

func (ss somestructs) addallstructs(otherstructs somestructs) {

    if ss.structinsts == nil {
        ss.structinsts = make([]somestruct, 0)
    }

    for _, structinst := range otherstructs.structinsts {
        ss.structinsts = append(ss.structinsts, structinst)
    }

    fmt.println("after append in method::: ", ss.structinsts)
}

然后在主包中我初始化结构并调用 addallstructs 方法。

package main

import (
  "hello_world/somepkg"
  "fmt"
)

func main() {
    var somestructs = somepkg.somestructs{
      []somepkg.somestruct{
        {name: "a", value: 1.0},
        {name: "b", value: 2.0},
      },
    }

    var otherstructs = somepkg.somestructs{
      []somepkg.somestruct{
        {name: "c", value: 3.0},
        {name: "d", value: 4.0},
      },
    }

    fmt.println("original::: ", somestructs)
    fmt.println("another::: ", otherstructs)

    somestructs.addallstructs(otherstructs)

    fmt.println("after append in main::: ", somestructs)
}

上述程序输出如下:

original:::  {[{a 1} {b 2}]}
another:::  {[{c 3} {d 4}]}
After append in method:::  [{a 1} {b 2} {c 3} {d 4}]
After append in main:::  {[{a 1} {b 2}]}

我试图了解我在这里缺少什么,因为数据在方法中是可见的。感谢对此的任何帮助。

--阿努普


解决方案


使用指针接收器:

func (ss *somestructs) addallstructs(otherstructs somestructs) {

    if ss.structinsts == nil {
        ss.structinsts = make([]somestruct, 0)
    }

    for _, structinst := range otherstructs.structinsts {
        ss.structinsts = append(ss.structinsts, structinst)
    }

    fmt.println("after append in method::: ", ss.structinsts)
}

如果方法需要改变接收者,接收者必须是一个指针

您必须返回append的结果:

package main

import (
    "fmt"
)

func main() {
    // Wrong
    var x []int
    _ = append(x, 1)
    _ = append(x, 2)

    fmt.Println(x) // Prints []

    // Write
    var y []int
    y = append(y, 1)
    y = append(y, 2)

    fmt.Println(y) // Prints [1 2]
}

以上就是《将结构体切片附加到另一个结构体中》的详细内容,更多关于的资料请关注golang学习网公众号!

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