首页 > 解决方案 > 结构组件的分配值消失

问题描述

我正在尝试创建一个结构列表并将值分配给列表中每个结构的组件:

package main
import ("fmt";"strconv")
type Mystruct struct{
    code string
    val int
}

var stlist []Mystruct // Need to create this list

func main(){
    //Trying to create list of structures and assigning values: 
    for i,_:=range [3]int{} {
        var st =Mystruct{}
        stlist = append(stlist, st)
        st.val = i
        st.code = "code_"+strconv.Itoa(i)
        fmt.Println("st.code=", st.code, "; st.val=", st.val) // Looks OK. 
    }
    //check values of each item of list: 
    fmt.Println( "-----------------------" )
    for _,e := range stlist{
        fmt.Println("st.code=", e.code, "; st.val=", e.val) // values are blank! Why?
    }
}

上面的代码编译并运行没有任何错误。然而,正如上面评论中提到的,虽然这些值似乎分配给了列表的每个组件,但在第二个循环中,发现结构列表中所有结构的两个组件都是空白的。输出是:

st.code= code_0 ; st.val= 0
st.code= code_1 ; st.val= 1
st.code= code_2 ; st.val= 2
-----------------------
st.code=  ; st.val= 0
st.code=  ; st.val= 0
st.code=  ; st.val= 0

问题出在哪里,如何解决?谢谢你的帮助。

标签: gostruct

解决方案


在第一个循环中,在设置值之前附加结构,以便将空结构添加到数组中。

你应该把

stlist = append(stlist, st)

在下面

st.val = i
st.code = "code_"+strconv.Itoa(i)

这样你首先设置值,然后将结构添加到你的数组中


推荐阅读