0

我一直在阅读 [golang-book]:http ://www.golang-book.com并在进行过程中完成练习。在第 6 章中,有一个练习必须找到未排序列表 [x] 中的最小元素。

我有以下代码,但不知何故我不知道为什么方法长度 (len) 在第 14 行给我一个错误:x.len undefined (type []int has no field or method len)

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 方法?任何帮助是极大的赞赏。

4

3 回答 3

8

数组和切片没有 len() 方法。len() 函数是一种内置语言。

所以你的代码

for i := 1; i < x.len(); i++ {

应该

for i := 1; i < len(x); i++ {

这是操场上的工作版本。

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]);
        }
    }
}
于 2013-02-27T21:07:52.570 回答
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])
        }
    }
}
于 2013-02-27T21:07:23.467 回答
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/listor的实现container/ring,两者都指定了一个Len()方法。

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

于 2013-02-27T22:39:48.937 回答