为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 数组类型混淆

Golang 数组类型混淆

Go
慕无忌1623718 2021-06-29 18:59:58
我正在尝试为 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 之间的区别。看起来前者是一个特定长度的数组,后者是一个没有指定长度的数组。这里的任何澄清都是有用的。
查看完整描述

2 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

正如您所指出的,切片和数组在 Go 中是两种不同的类型,它们的行为也不同。所以 []Type 和 [1]Type 是两个不同的东西,不能互换使用。查看切片的精彩解释以获取有关它们的更多信息。

然而,您的修复比它需要的要复杂一些。你应该可以只使用

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

您目前拥有的

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

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


查看完整回答
反对 回复 2021-07-12
?
温温酱

TA贡献1752条经验 获得超4个赞

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

不过我找到了答案,[1]*Type 是一个数组,而 []*Type 是一个切片。所以解决方案是简单地切片父母,所以像:

Parents: parents[:]

有诀窍。


查看完整回答
反对 回复 2021-07-12
  • 2 回答
  • 0 关注
  • 284 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信