我正在尝试编译以下函数:
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()
。发生了什么事?
答案 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的指针上的函数,就像我在示例中所做的那样。