Memory Go-初始化空切片

Memory Go-初始化空切片,memory,go,slice,allocation,is-empty,Memory,Go,Slice,Allocation,Is Empty,要声明一个空切片,我知道您应该更喜欢 var t []string 结束 因为它不分配不必要的内存()。如果我有,这仍然适用吗 type example struct { s []string } e := &example{} i、 e.使用它会更好吗 e.s = []string{} 或 example.s已声明,因此无需执行任何操作 e := &example{} e.s = append(e.s, "val") fmt.Println(e.s) examp

要声明一个空切片,我知道您应该更喜欢

var t []string
结束

因为它不分配不必要的内存()。如果我有,这仍然适用吗

type example struct {
    s []string
}
e := &example{}
i、 e.使用它会更好吗

e.s = []string{}


example.s
已声明,因此无需执行任何操作

e := &example{}
e.s = append(e.s, "val")
fmt.Println(e.s)

example.s
已声明,因此无需执行任何操作

e := &example{}
e.s = append(e.s, "val")
fmt.Println(e.s)

上一个示例没有任何作用,因为
example.s
已经是正确类型的nil片。在这种情况下你不需要做任何事情。对不起-编辑了我的问题。还是真的吗?我明白你的意思,尽管密码无效
e.s
s
都是
nil
,因此您所要做的就是分配
e.s=nil
,而这不起任何作用
e.s
已经是正确的类型,因此您无需执行任何操作。太棒了,谢谢@jimb您的上一个示例没有执行任何操作,因为
example.s
已经是正确类型的零片段。在这种情况下你不需要做任何事情。对不起-编辑了我的问题。还是真的吗?我明白你的意思,尽管密码无效
e.s
s
都是
nil
,因此您所要做的就是分配
e.s=nil
,而这不起任何作用
e.s
已经是正确的类型,因此您无需执行任何操作。太棒了,谢谢@JimB
e := &example{}
e.s = append(e.s, "val")
fmt.Println(e.s)