/ / Golang Array Type Confusion - масиви, go, google-drive-sdk

Golang Array Type Confusion - масиви, перейдіть, google-drive-sdk

Я намагаюся надати аргументи на Диску GoogleAPI GoLang (хоча вам, ймовірно, не потрібно нічого знати про 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] * Тип та [] * Тип. Схоже, перший - це масив певної довжини, а останній - масив без заданої довжини. Будь-яке уточнення тут буде корисним.

Відповіді:

4 для відповіді № 1

Як ви зазначали, фрагменти та масиви - це два різні типи Go і ведуть себе по-різному. Отже [] Тип та [1] Тип - це дві різні речі, і їх не можна взаємозамінно використовувати. Перевірте чудово пояснення скибочок для отримання додаткової інформації про них.

Однак ваше виправлення дещо складніше, ніж потрібно. Ви повинні мати можливість просто користуватися

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

де ви зараз є

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

Якщо ви інстанціюєте змінну у вигляді фрагмента, вам не доведеться пізніше розрізати її.


0 для відповіді № 2

Моя проблема, мабуть, не знала, що шукати - [] * Введіть не дуже хороший запит Google.

Однак я знайшов відповідь: [1] * Тип - це масив, а [] * Тип - це фрагмент. Тож рішення полягає в тому, щоб просто нарізати батьків, так що на кшталт:

Parents: parents[:]

Чи трюк.