2017-12-16 13 views
1
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に変更しても問題ありません。それがなぜ起こるのかについて何らかの理由を見つけることができませんでした。配列にポインタを追加できないのはなぜですか?

答えて

6

することができます、それはあなたあるは追加要素がresults[1]であることを意味スライスに追加することだけだ、とresults[0]nilポインタ(ポインタのデフォルト値)です。

あなたはそれを1の容量が、ゼロの長さを与えることresults := make([]*Circle, 0, 1)を行うことができ、またはあなたがresults := []*Circle{}(最もコンパクトな)を行うことができ、またはそれだけで正常に動作しますので、あなたは、単にあなたがresults[0]に割り当てるバージョンを保つことができます。

2

することができますが、あなたは長さ1でmakeを使用しているので、[0]インデックスが既に設定されている(ゼロ円に...)

あなたresults[0].xresults[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

関連する問題