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或单变量形式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 回答