Google-Drive имеет REST-API, который вы можете использовать непосредственно для загрузки / выгрузки файлов .
pkg google. golang .org / api действительно упрощает это, но его документация довольно тонка на примерах. Таким образом, после включения Google Drive API в вашей целевой учетной записи, поток по существу выглядит следующим образом:
import (
"golang.org/x/net/context"
"golang.org/x/oauth2"
"golang.org/x/oauth2/google"
"google.golang.org/api/drive/v3"
"google.golang.org/api/googleapi" // needed for googleapi.Field definition
)
// `clientIDfile` generated when enabling Drive-API on your account
b, err := ioutil.ReadFile(clientIDfile)
// see what scope is right for you: https://godoc.org/google.golang.org/api/drive/v3#pkg-constants
gscope := drive.DriveFileScope
gconfig, err := google.ConfigFromJSON(b, gscope) // returns a `*oauth2.Config`
// load/parse user (API) token (requires a one-time oath step to create/store this token file)
tok := &oauth2.Token{}
err = json.NewDecoder(tokenFileHandle).Decode(tok)
ctx := context.Background() // replace with your app context if u have one
cli, err := gconfig.Client(ctx, tok)
service, err := drive.New(cli)
Вооружившись этим дескриптором service
, вы можете получить доступ к любому из документированных API накопителей, например:
folderID := "root" // replace with specific folder ID
pageSize := int64(1000)
queryString := fmt.Sprintf("mimeType != 'application/vnd.google-apps.folder' and '%s' in parents", folderID)
attrFields := googleapi.Field("nextPageToken, files(id, name, parents, md5Checksum, size, modifiedTime, mimeType)")
flistQuery := service.Files.List().
PageSize(pageSize).
Q(queryString).
Fields(attrFields)
выведет список всех файлов (которые не являются папками) в вашем каталоге root, возвращая только запрошенные атрибуты.