Golang 数组类型混淆

我正在尝试为 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()

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


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


慕无忌1623718
浏览 285回答 2
2回答

子衿沉夜

正如您所指出的,切片和数组在 Go 中是两种不同的类型,它们的行为也不同。所以 []Type 和 [1]Type 是两个不同的东西,不能互换使用。查看切片的精彩解释以获取有关它们的更多信息。然而,您的修复比它需要的要复杂一些。你应该可以只使用parents := []*drive.ParentReference{&parent}您目前拥有的parents := [...]*drive.ParentReference{&parent}如果将变量实例化为切片,则以后无需对其进行切片。

温温酱

我的问题显然是不知道要搜索什么 - []*Type 不是一个很好的 Google 查询。不过我找到了答案,[1]*Type 是一个数组,而 []*Type 是一个切片。所以解决方案是简单地切片父母,所以像:Parents: parents[:]有诀窍。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go