<分区>
我想这个问题问了好几次,但我还是很困惑:
我有以下代码:
type obj struct {
s *string
}
var cmdsP = []*string {
stringPointer("create"),
stringPointer("delete"),
stringPointer("update"),
}
var cmds = []string {
"create",
"delete",
"update",
}
// []*string
func loop1() {
slice := make([]obj, 0, 0)
for _, cmd := range cmdsP {
slice = append(slice, obj{cmd})
}
for _, o := range slice {
fmt.Println(*o.s)
}
}
// []string
func loop2() {
slice := make([]obj, 0, 0)
for _, cmd := range cmds {
slice = append(slice, obj{&cmd})
}
for _, o := range slice {
fmt.Println(*o.s)
}
}
func stringPointer(v string) *string {
return &v
}
https://play.golang.org/p/65Le_8Pi3Mi
唯一的区别在于 slice 语义 []*string
和 []string
它如何改变 cmd
变量的行为?您能否详细画出或解释一下在两次循环的迭代过程中内存中发生了什么?