Go:type [] string没有字段或方法len

时间:2014-04-23 18:22:15

标签: go

我正在尝试编译以下函数:

func (self algo_t) chk_args(args []string) {
    if args.len() != self.num_args {
        fmt.Fprintf(
            os.Stdout,
            "%s expected %d argument(s), received %d\n",
            self.name,
            self.num_args,
            args.len(),
        )
        fmt.Printf("quickcrypt %s\n", self.usage)
    }
}

我收到错误args.len undefined (type []string has no field or method len)

Args的类型为[]string,语言规范says这是一种切片类型。已为Slice类型定义builtin包文档says v.len()。发生了什么事?

2 个答案:

答案 0 :(得分:8)

len不是一种方法,它是一种功能。也就是说,使用len(v)而非v.len()

答案 1 :(得分:1)

尝试使用:

func (self *algo_t) chk_args(args []string) {
    if len(args) != self.num_args {
        fmt.Fprintf(
            os.Stdout,
            "%s expected %d argument(s), received %d\n",
            self.name,
            self.num_args,
            len(args),
        )
        fmt.Printf("quickcrypt %s\n", self.usage)
    }
}

func len(v Type) int是一个内置函数,允许您传入变量,而不是内置函数。

作为旁注,您可能希望chk_args是指向algo_t的指针上的函数,就像我在示例中所做的那样。