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
,则可以正常工作。无法找到原因,为什么会这样。
答案 0 :(得分:6)
您可以,只是 附加到切片,这意味着您添加的元素位于results[1]
,而results[0]
是nil
}指针(指针的默认值)。
你可以results := make([]*Circle, 0, 1)
给它一个容量为1但是长度为零,或者你可以做results := []*Circle{}
(最紧凑),或者你可以简单地保留你指定给{的版本{1}},因为它运作得很好。
答案 1 :(得分:2)
你可以,但是你使用make
长度为1,所以[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)
}