【发布时间】:2018-12-20 18:43:23
【问题描述】:
我认为这个问题被问了好几次,但我仍然感到困惑:
我有以下代码:
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
唯一的区别在于切片语义[]*string 和[]string 它如何改变cmd 变量的行为?您能否详细说明或详细说明在通过两个循环进行迭代期间内存中发生的情况?
【问题讨论】: