len方法未定义

时间:2013-02-27 21:03:13

标签: go

我一直在阅读[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方法?非常感谢任何帮助。

3 个答案:

答案 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/listcontainer/ring的实现,两者都指定了Len()方法。

虽然原始切片和数组没有附加任何方法,但您必须使用内置函数len()