package main
import "fmt"
type Circle struct {
x string
}
func main() {
circle := Circle{x: "blah"}
results := make([]*Circle, 1)
results = append(results, &circle)
fmt.Printf("Here: %s\n", results[0].x)
}
如果我改变行results = append(results, &circle)
到results[0] = &circle
工作正常。无法找到任何理由为什么会这样。
你可以,只是你附加到切片,这意味着你添加的元素在results[1]
,而results[0]
是一个nil
指针(指针的默认值)。
你可以做results := make([]*Circle, 0, 1)
给它一个容量为1,但长度为零,或者你可以做results := []*Circle{}
(最紧凑),或者你可以简单地保留你分配给results[0]
的版本,因为它工作正常。
你可以,但是你使用长度为1的make
,所以[0]索引已经设置(到零圆圈......)
将你的results[0].x
改为results[1].x
的作品,但不使用make
按预期工作:
package main
import "fmt"
type Circle struct {
x string
}
func main() {
circle := Circle{x: "blah"}
results := []*Circle{} // initialize empty slice of Circle pointers
results = append(results, &circle)
fmt.Printf("Here: %s\n", results[0].x)
}