8

http://play.golang.org/p/jdWZ9boyrh

このエラーが発生しています

    prog.go:29: invalid receiver type *[]Sentence ([]Sentence is an unnamed type)
    prog.go:30: cannot range over S (type *[]Sentence)
    [process exited with non-zero status]

関数が構造体配列を受信しようとしたとき。

名前のない型とはどういう意味ですか? なぜ名前を付けられないのですか?関数の外で名前を付けて、名前を付けて引数として渡すこともできます。

それは動作しません。[]Sentence を引数として渡して、必要な問題を解決しました。しかし、それらを引数として渡すときは、新しいコピーを返さなければなりませんでした。

関数が構造体配列を受け取るだけで、何も返さなくて済むようになればいいと思います。

以下のように:

func (S *[]Sentence)MarkC() {
  for _, elem := range S {
    elem.mark = "C"
  }
}

var arrayC []Sentence
for i:=0; i<5; i++ {
  var new_st Sentence
  new_st.index = i
  arrayC = append(arrayC, new_st)
}
//MarkC(arrayC)
//fmt.Println(arrayC)
//Expecting [{0 C} {1 C} {2 C} {3 C} {4 C}] 
//but not working 

[]Sentenceでも機能しません。

関数に Struct 配列を受信させる方法はありますか?

4

1 に答える 1

4

私はまだ Go を学んでいますが、名前付きの型が必要なようです。ご存じのとおり、「文の配列」 - これは実際には匿名型です。名前を付けるだけです。

(また、要素のコピー (および変更の破棄) を回避するために、forまたは 1 変数形式を使用rangeします)

type Sentence struct {
  mark string
  index int
}

type SentenceArr []Sentence

func (S SentenceArr)MarkC() {
  for i := 0; i < len(S); i++ {
    S[i].mark = "S"
  }
}
于 2013-11-07T05:38:55.163 に答える