如何修改在golang中作为结构的切片元素?

Hak*_*aba 5 go

你有一个golang切片结构,你想在那里改变一个条目.

type Type struct {
    value int
}

func main() {

    s := []Type{{0}, {0}}

    // Prints  [{0} {0}]
    fmt.Println(s)

    firstEntry := s[0]
    firstEntry.value = 5

    // Also prints [{0} {0}]
    fmt.Println(s)
}
Run Code Online (Sandbox Code Playgroud)

https://play.golang.org/p/32tpcc3-OD

使用括号运算符并修改其返回值不会更改切片本身.

执行此切片条目修改的推荐方法是什么?

Wea*_*ter 11

尝试

s[0].value = 5
Run Code Online (Sandbox Code Playgroud)

这将进入切片的后备存储.也

p := &s[1]
p.value = 6
Run Code Online (Sandbox Code Playgroud)


Tri*_*ian 6

您还可以直接获取切片元素的地址并取消引用它:

func main() {

    s := []Type{{0}, {0}}

    // Prints  [{0} {0}]
    fmt.Println(s)

    // De-reference the address of the slice element
    (&s[0]).value = 5

    // Prints [{5} {0}]
    fmt.Println(s)
}
Run Code Online (Sandbox Code Playgroud)