将数组从索引1发送到函数

时间:2018-08-08 11:22:31

标签: arrays go slice

我有这个功能,我从args中得到了需要使用的值

Run: func(cmd *cobra.Command, args []string) {

   ....

    myFunc(args)
} 

我需要将myFunc而不是index 1的所有参数传递给0。 当然我可以循环并从索引1创建另一个数组,但是 此重复几乎除索引0以外的所有值,有没有办法避免在GO中使用它?

1 个答案:

答案 0 :(得分:4)

是的,只需slice args切片,然后将其传递:

myFunc(args[1:])

argsslice,而不是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:])
}