gpt4 book ai didi

arrays - 为什么不能超过 *[]Struct?

转载 作者:IT王子 更新时间:2023-10-29 01:28:06 26 4
gpt4 key购买 nike

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 数组吗?

最佳答案

我还在学习 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"
}
}

关于arrays - 为什么不能超过 *[]Struct?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19828652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com