为什么范围不能超过* [] Struct?

时间:2013-11-07 05:32:52

标签: arrays pointers struct go

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 

它与[]句子无关。

无论如何我能使函数接收Struct数组吗?

1 个答案:

答案 0 :(得分:2)

我还在学习Go,但似乎它想要名字的类型。你知道,“一系列句子” - 这实际上是一种匿名类型。你只需要命名它。

(另外,使用forrange的单变量形式以避免复制元素(并放弃更改))

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"
  }
}