http://play.golang.org/p/fJACxhSrXX
我想遍历一系列结构。
func GetTotalWeight(data_arr []struct) int {
total := 0
for _, elem := range data_arr {
total += elem.weight
}
return total
}
但我收到语法错误
syntax error: unexpected ), expecting {
是否可以遍历结构?
答案 0 :(得分:12)
您的功能几乎完全正确。您希望将TrainData定义为type
,并将GetTotalWeight
的类型签名更改为[]TrainData
,而不是[]struct
,如下所示:
import "fmt"
type TrainData struct {
sentence string
sentiment string
weight int
}
var TrainDataCity = []TrainData {
{"I love the weather here.", "pos", 1700},
{"This is an amazing place!", "pos", 2000},
{"I feel very good about its food and atmosphere.", "pos", 2000},
{"The location is very accessible.", "pos", 1500},
{"One of the best cities I've ever been.", "pos", 2000},
{"Definitely want to visit again.", "pos", 2000},
{"I do not like this area.", "neg", 500},
{"I am tired of this city.", "neg", 700},
{"I can't deal with this town anymore.", "neg", 300},
{"The weather is terrible.", "neg", 300},
{"I hate this city.", "neg", 100},
{"I won't come back!", "neg", 200},
}
func GetTotalWeight(data_arr []TrainData) int {
total := 0
for _, elem := range data_arr {
total += elem.weight
}
return total
}
func main() {
fmt.Println("Hello, playground")
fmt.Println(GetTotalWeight(TrainDataCity))
}
运行此命令:
Hello, playground
13300
答案 1 :(得分:1)
range
关键字仅适用于字符串,数组,切片和通道。所以,不可能用range
迭代结构。但是你提供了一个切片,所以这不是问题。问题是函数的类型防御。
你写道:
func GetTotalWeight(data_arr []struct) int
现在问问自己:我在这里要求的是什么类型?
以[]
开头的所有内容都表示一个切片,因此我们处理一块结构。
但是什么类型的结构?匹配ever struct的唯一方法是使用
界面值。否则,您需要提供显式类型,例如
TrainData
。
这是语法错误的原因是语言允许的唯一时间
struct
关键字用于定义新结构。结构定义有
struct关键字,后跟一个{
,这就是编译器告诉你他期望的原因
{
。
结构定义示例:
a := struct{ a int }{2} // anonymous struct with one member