我一直在阅读[golang-book]:http://www.golang-book.com并在我继续阅读时完成练习。在第6章中,有一个练习必须找到未排序列表中的最小元素[x]。
我有以下代码但不知何故我不知道为什么方法长度(len)在第14行给出错误:x.len undefined(type [] int没有字段或方法len)< / strong>
package main
import "fmt"
func main() {
x := []int{
48, 96, 86, 68,
57, 82, 63, 70,
37, 34, 83, 27,
19, 97, 9, 17,
}
small := x[0]
for i := 1; i < x.len(); i++ {
if x[i] < small {
fmt.Println(x[i])
}
}
}
我使用的逻辑是谷歌搜索所以也许数组上没有len方法?非常感谢任何帮助。
答案 0 :(得分:8)
数组和切片没有len()方法。 len()函数是一种内置语言。
所以你的代码
for i := 1; i < x.len(); i++ {
应该是
for i := 1; i < len(x); i++ {
以下是the playground中的工作版本。
package main
import "fmt"
func main(){
x := []int{
48,96,86,68,
57,82,63,70,
37,34,83,27,
19,97, 9,17,
}
small := x[0]
for i := 1; i < len(x); i++ {
if x[i] < small {
fmt.Println(x[i]);
}
}
}
答案 1 :(得分:4)
len()
不是切片的方法。这是一个全球性的功能。你想说len(x)
。
package main
import "fmt"
func main() {
x := []int{
48, 96, 86, 68,
57, 82, 63, 70,
37, 34, 83, 27,
19, 97, 9, 17,
}
small := x[0]
for i := 1; i < len(x); i++ {
if x[i] < small {
fmt.Println(x[i])
}
}
}
答案 2 :(得分:1)
实际上,数组和切片类型可以有一个len()
方法,如下所示:
http://play.golang.org/p/CkU4LJZgUb
package main
import "fmt"
type SliceType []int
func (s SliceType) len() int {
return len(s)
}
func main() {
s := SliceType{1, 2, 3, 4, 5, 6, 7, 8, 9}
for i := 0; i < s.len(); i++ {
fmt.Println(s[i])
}
}
您找到的代码可能是container/list
或container/ring
的实现,两者都指定了Len()
方法。
虽然原始切片和数组没有附加任何方法,但您必须使用内置函数len()
。