Golang数组类型混乱

时间:2013-12-28 02:24:35

标签: arrays go google-drive-api

我正在尝试为Google Drive GoLang API提供参数(尽管您可能不需要了解有关API的任何信息来回答这个问题)。我是Go的新手,我的构建错误信息令我感到困惑。

其中一个可选参数是应存储上载文件的父文件夹数组。父文件夹用ParentRefernce结构引用。请参阅以下Golang代码片段:

parent := drive.ParentReference{Id: parent_folder}
parents := [...]*drive.ParentReference{&parent}
driveFile, err := service.Files.Insert(
  &drive.File{Title: "Test", Parents: parents}).Media(goFile).Do()

我得到的构建错误是针对上面代码段的最后一行: 不能使用parent(类型[1] * drive.ParentReference)作为字段值类型[] * drive.ParentReference

我的困惑在于[1] *类型和[] *类型之间的区别。看起来前者是特定长度数组,后者是没有指定长度的数组。这里的任何澄清都是有用的。

2 个答案:

答案 0 :(得分:4)

如前所述,切片和数组在Go中是两种不同的类型,行为也不同。所以[] Type和[1] Type是两个不同的东西,不能互换使用。查看精彩的explanation of slices,了解有关它们的更多信息。

但是,您的修复程序比它需要的更复杂。你应该可以使用

parents := []*drive.ParentReference{&parent}

你目前所在的地方

parents := [...]*drive.ParentReference{&parent}

如果将变量实例化为切片,则以后无需对其进行切片。

答案 1 :(得分:0)

我的问题显然不知道要搜索什么 - [] *类型不是一个非常好的Google查询。

我找到了答案,[1] * Type是一个数组,而[] * Type是一个切片。因此,解决方案是简单地对父母进行切片,例如:

Parents: parents[:]

诀窍。