为什么不能追加指向数组的指针?

时间:2017-12-16 01:13:05

标签: pointers go

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,则可以正常工作。无法找到原因,为什么会这样。

2 个答案:

答案 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)
}

在游乐场中运行:https://play.golang.org/p/7vMOfAXvgI