我有这个功能,我从args
中得到了需要使用的值
Run: func(cmd *cobra.Command, args []string) {
....
myFunc(args)
}
我需要将myFunc
而不是index 1
的所有参数传递给0
。
当然我可以循环并从索引1创建另一个数组,但是
此重复几乎除索引0以外的所有值,有没有办法避免在GO中使用它?
答案 0 :(得分:4)
是的,只需slice args
切片,然后将其传递:
myFunc(args[1:])
args
是slice,而不是array。您可以(重新)切片切片,这将是原始切片的连续子部分。例如:
args[1:4]
上面是另一个切片,仅包含args
中的以下元素:
args[1], args[2], args[3]
上限是互斥的。缺少的上层索引默认为长度,缺少的下层索引默认为0
。这些都在Spec: Slice expressions中进行了详细说明。
请注意,对切片进行切片不会复制元素:它将指向实际包含元素的同一基础数组。切片只是一个小的,类似于结构的标头,其中包含指向基础数组的指针。
请注意,如果args
为空,则以上内容将导致运行时出现紧急情况。为避免这种情况,请先检查其长度:
if len(args) == 0 {
myFunc(nil) // or an empty slice: []string{}
} else {
myFunc(args[1:])
}