我有这样的代码
t := strings.FieldsFunc(value, extract_word)
fmt.Println("t:", len(t),t)
m := make(map[string]int)
for word := t.Front(); word != nil; word=word.Next(){
m[word]++
}
它会出现此错误
t.Front undefined (type []string has no field or method Front)
我知道list有Front()方法。 http://golang.org/pkg/container/list/ 但为什么在这里抱怨? 如此困惑,需要帮助。 谢谢!
答案 0 :(得分:2)
[]T
不是其他语言(例如Python)中引用的“列表”。在Go中,它被称为“Slice”http://golang.org/ref/spec#Slice_types
其元素范围从0
到len(slice)-1
,并使用类似C的数组访问表示法进行访问。切片的“前面”通常被认为是slice[0]
,但如果你使用切片来实现类似的东西,例如堆栈,你可以考虑使用不同的索引。
Go中没有内置类型定义了任何方法,但确实有built-in functions将它们作为参数,例如len
。
您链接的包实现了List
类型。正如顶部的文档所说“包列表实现了一个双向链表”。您可以通过调用list.New()
创建的这个双向链接列表具有Front
方法,在包文档中列出的其他方法中。
答案 1 :(得分:1)
t
不是List
。它是一串字符串(切片和列表不是一回事)。切片的第一个元素是[0]
。
我相信你的for
循环就是这个(未经测试):
for _, word := range t {
m[word]++
}