golang自动生成Google API接口的插件库google的使用

Golang 自动生成 Google API 接口的插件库 google 的使用

Google APIs Go 客户端库

这是从 Google Discovery Service 的 JSON 描述文件自动生成的 Go 库集合。

快速开始

首先安装所需的 API 客户端库:

$ go get google.golang.org/api/tasks/v1
$ go get google.golang.org/api/moderator/v1
$ go get google.golang.org/api/urlshortener/v1
... etc ...

然后可以在代码中使用:

package main

import (
        "context"
        "net/http"

        "google.golang.org/api/urlshortener/v1"
)

func main() {
        ctx := context.Background()
        svc, err := urlshortener.NewService(ctx)
        // ...
}

授权认证

默认情况下,每个 API 将使用[Google 应用程序默认凭据]进行授权。这允许您的应用程序在许多环境中运行而无需显式配置。

// import "google.golang.org/api/sheets/v4"
client, err := sheets.NewService(ctx)

要使用 JSON 密钥文件授权,请将 option.WithCredentialsFile 传递给所需包的 NewService 函数:

client, err := sheets.NewService(ctx, option.WithCredentialsFile("path/to/keyfile.json"))

您可以使用 golang.org/x/oauth2 包创建 oauth2.TokenSource 来更好地控制授权。然后将 option.WithTokenSource 传递给 NewService 函数:

tokenSource := ...
svc, err := sheets.NewService(ctx, option.WithTokenSource(tokenSource))

状态

这些是自动生成的 Go 库,因此它们可能包含从一个版本到下一个版本的破坏性更改。生成器本身及其生成的代码因此被视为测试版。

这些客户端库由 Google 官方支持。但是,这些库被认为是完整的并且处于维护模式。这意味着我们将解决关键错误和安全问题,但不会添加任何新功能。

完整示例

下面是一个使用 Google Sheets API 的完整示例:

package main

import (
	"context"
	"fmt"
	"log"

	"google.golang.org/api/option"
	"google.golang.org/api/sheets/v4"
)

func main() {
	ctx := context.Background()
	
	// 使用服务账号密钥文件认证
	client, err := sheets.NewService(ctx, option.WithCredentialsFile("credentials.json"))
	if err != nil {
		log.Fatalf("Unable to retrieve Sheets client: %v", err)
	}

	// 电子表格ID和范围
	spreadsheetId := "your-spreadsheet-id"
	readRange := "Sheet1!A1:C3"

	// 读取数据
	resp, err := client.Spreadsheets.Values.Get(spreadsheetId, readRange).Do()
	if err != nil {
		log.Fatalf("Unable to retrieve data from sheet: %v", err)
	}

	// 打印数据
	if len(resp.Values) == 0 {
		fmt.Println("No data found.")
	} else {
		fmt.Println("Name, Major:")
		for _, row := range resp.Values {
			fmt.Printf("%s, %s\n", row[0], row[1])
		}
	}
}

注意事项

  1. 这些库是自动生成的,可能会包含破坏性更改
  2. 处于维护模式,只修复关键错误和安全问题
  3. 对于 Google Cloud Platform API,建议使用 Cloud Client Libraries for Go

更多关于golang自动生成Google API接口的插件库google的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang自动生成Google API接口的插件库google的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Google API Go 客户端库使用指南

Google 官方为 Go 语言提供了自动生成的 API 客户端库,可以方便地访问各种 Google 服务。下面我将介绍如何使用这些库。

安装

首先需要安装核心库和你要使用的特定 API 库:

go get google.golang.org/api
go get google.golang.org/api/calendar/v3  // 例如日历API

基本使用模式

  1. 创建客户端
  2. 初始化服务
  3. 调用 API 方法
package main

import (
	"context"
	"log"

	"golang.org/x/oauth2/google"
	"google.golang.org/api/calendar/v3"
	"google.golang.org/api/option"
)

func main() {
	ctx := context.Background()
	
	// 1. 使用默认凭据创建客户端
	creds, err := google.FindDefaultCredentials(ctx, calendar.CalendarReadonlyScope)
	if err != nil {
		log.Fatalf("获取凭据失败: %v", err)
	}

	// 2. 创建日历服务
	srv, err := calendar.NewService(ctx, option.WithCredentials(creds))
	if err != nil {
		log.Fatalf("创建日历服务失败: %v", err)
	}

	// 3. 调用API - 获取日历事件列表
	events, err := srv.Events.List("primary").Do()
	if err != nil {
		log.Fatalf("获取日历事件失败: %v", err)
	}

	for _, item := range events.Items {
		log.Printf("事件: %s (%s)\n", item.Summary, item.Start.DateTime)
	}
}

认证方式

Google API 支持多种认证方式:

1. 使用服务账号

import "google.golang.org/api/option"

creds, err := google.CredentialsFromJSON(ctx, serviceAccountJSON, scope)
srv, err := calendar.NewService(ctx, option.WithCredentials(creds))

2. 使用 OAuth2 令牌

import "golang.org/x/oauth2"

token := &oauth2.Token{AccessToken: "your-access-token"}
srv, err := calendar.NewService(ctx, option.WithTokenSource(oauth2.StaticTokenSource(token)))

3. 使用 API 密钥(仅限部分 API)

srv, err := calendar.NewService(ctx, option.WithAPIKey("your-api-key"))

常用 API 示例

Gmail API

import "google.golang.org/api/gmail/v1"

func listMessages(service *gmail.Service, user string) {
	msgs, err := service.Users.Messages.List(user).Do()
	// 处理消息...
}

Google Drive API

import "google.golang.org/api/drive/v3"

func listFiles(service *drive.Service) {
	files, err := service.Files.List().Do()
	// 处理文件...
}

Google Sheets API

import "google.golang.org/api/sheets/v4"

func readSheet(service *sheets.Service, spreadsheetId string) {
	resp, err := service.Spreadsheets.Values.Get(spreadsheetId, "Sheet1!A1:D5").Do()
	// 处理数据...
}

最佳实践

  1. 重用客户端和服务实例:创建客户端和服务实例开销较大,应该尽可能重用
  2. 处理配额限制:实现适当的重试逻辑处理速率限制
  3. 错误处理:检查所有 API 调用的错误
  4. 上下文使用:传递 context 以便取消长时间运行的请求
// 带有超时和重试的示例
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()

var events *calendar.Events
var err error

// 简单重试逻辑
for i := 0; i < 3; i++ {
	events, err = srv.Events.List("primary").Context(ctx).Do()
	if err == nil || !isRateLimitError(err) {
		break
	}
	time.Sleep(time.Second * time.Duration(i+1))
}

生成自定义 API 客户端

如果你有自己的 Google API 发现文档,可以使用 google-api-go-generator 工具生成客户端:

go get github.com/googleapis/google-api-go-client/google-api-go-generator
google-api-go-generator -api_json_file /path/to/api.json -output /path/to/output

Google 官方 Go 客户端库提供了类型安全的方法调用和良好的错误处理,是访问 Google 服务的首选方式。

回到顶部