すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:SDK for Go

最終更新日:Aug 26, 2026

Go 用 SDK は、TensorFlow、PyTorch、文字列など、複数の入力形式と出力形式をラップし、キューサービスの非同期呼び出しをサポートします。このトピックでは、各 API について説明し、完全なコード例を提供します。

説明

SDK のユースケースと呼び出しの原則については、「サービス呼び出し SDKs」をご参照ください。

前提条件

Go パッケージ管理ツールは、コンパイル時に SDK のコードを自動的にダウンロードします。事前に SDK をインストールする必要はありません。呼び出しロジックをカスタマイズする場合は、まずGo 向け SDK のコードをダウンロードしてから変更してください。

SDK をインポートするには、次のコードを使用します。

import (
    "github.com/pai-eas/eas-golang-sdk/eas"
)

クイックスタート

モデルの入力データフォーマットに合ったリクエストクラスを選択します。次の例は、文字列リクエストを使用した最小限のエンドツーエンド呼び出しを示しています。

package main

import (
    "fmt"
    "github.com/pai-eas/eas-golang-sdk/eas"
)

func main() {
    client := eas.NewPredictClient("182848887922****.cn-shanghai.pai-eas.aliyuncs.com", "my_service")
    client.SetToken("YOUR_SERVICE_TOKEN")
    client.Init()

    resp, err := client.StringPredict("[{}]")
    if err != nil {
        fmt.Printf("failed to predict: %v\n", err.Error())
    } else {
        fmt.Printf("%v\n", resp)
    }
}

API リファレンス

Go 用 SDK は、以下の API クラスを提供します。これらのクラスは、目的別に 3 つのグループに分類されています。

グループ

説明

メインクライアント

PredictClient: サービス情報 (エンドポイント、サービス名、トークン) を設定し、リクエストを送信して、レスポンスを受信します。

入出力

  • TFRequest / TFResponse: TensorFlow モデルのリクエストとレスポンスをラップします。

  • TorchRequest / TorchResponse: PyTorch モデルのリクエストとレスポンスをラップします。

  • 文字列を扱う場合 は、専用の Request または Response クラスは不要です。StringPredict() に文字列を渡すと、文字列が返されます。

キュー サービス

  • QueueClient: データの送信、データプッシュのサブスクリプション、キューステータスのクエリに使用される非同期キュークライアントです。

  • types.Watcher: QueueClient.Watch() で作成され、プッシュされたデータを受信するキューサブスクライバーです。

PredictClient

サービス情報の設定、リクエストの送信、予測結果の受信に使用されるメインクライアントクラスです。

メソッド

説明

NewPredictClient(endpoint string, serviceName string) *PredictClient

  • PredictClient クラスのコンストラクターです。

  • パラメーター:

    • endpoint: 必須。サーバーのエンドポイントアドレスを指定します。標準サービスの場合、このパラメーターをデフォルト ゲートウェイ エンドポイントに設定します。

    • serviceName: 必須。サービスの名前を指定します。

  • 戻り値: 生成された PredictClient オブジェクト。

SetEndpoint(endpointName string)

  • サービスエンドポイントを設定します。

  • endpointName は、サーバーのエンドポイントアドレスを指定します。標準サービスの場合、このパラメーターをデフォルト ゲートウェイ エンドポイントに設定します。

SetServiceName(serviceName string)

  • 呼び出すサービスの名前を設定します。

  • serviceName は、呼び出すサービスの名前を指定します。

SetEndpointType(endpointType string)

  • サーバーのゲートウェイ タイプを設定します。

  • endpointType は、ゲートウェイ タイプを指定します。システムは以下のゲートウェイ タイプをサポートしています:

    • "DEFAULT": デフォルトゲートウェイ。ゲートウェイ タイプが指定されていない場合、このタイプが使用されます。

    • "DIRECT": 高速ダイレクト接続チャネルを介してサービスにアクセスします。

SetToken(token string)

  • サービスアクセス用のトークンを設定します。

  • token は、サービスへのアクセスに使用される認証トークンを指定します。

SetHttpTransport(transport *http.Transport)

  • HTTP クライアントの Transport プロパティを設定します。

  • transport は、HTTP リクエストの送信時に使用される Transport オブジェクトを指定します。

SetRetryCount(max_retry_count int)

  • 失敗したリクエストのリトライ回数を設定します。

  • max_retry_count は、失敗したリクエストを再試行する回数を指定します。デフォルト値は 5 です。

    重要

    サーバーのプロセスエラー、サーバー エラー、または永続的なゲートウェイ接続の切断によってリクエストが失敗した場合、クライアントはリクエストを再送信する必要があります。したがって、このパラメーターを 0 に設定しないでください。

SetTimeout(timeout int)

  • リクエスト タイムアウトを設定します。

  • timeout は、リクエストのタイムアウト時間をミリ秒 (ms) 単位で指定します。デフォルト値は 5000 です。

Init()

PredictClient オブジェクトを初期化します。すべてのパラメーターを設定した後、Init() を呼び出して設定を適用します。

Predict(request Request) Response

  • オンライン予測サービスに予測リクエストを送信します。

  • パラメーター: Request オブジェクトは interface(StringRequest, TFRequest, TorchRequest) です。

  • 戻り値: Response オブジェクトは interface(StringResponse, TFResponse, TorchResponse) です。

StringPredict(request string) string

  • オンライン予測サービスに予測リクエストを送信します。

  • request は、送信するリクエスト文字列を指定します。

  • 戻り値: STRING 型のサービスレスポンス。

TorchPredict(request TorchRequest) TorchResponse

  • オンライン予測サービスに PyTorch 予測リクエストを送信します。

  • request は、TorchRequest クラスのオブジェクトを指定します。

  • 戻り値: TorchResponse オブジェクト。

TFPredict(request TFRequest) TFResponse

  • オンライン予測サービスに予測リクエストを送信します。

  • request は、TFRequest クラスのオブジェクトを指定します。

  • 戻り値: TFResponse オブジェクト。

TFRequest

TensorFlow モデルの入力データを構築します。

メソッド

説明

TFRequest(signatureName string)

  • TFRequest クラスのコンストラクターです。

  • signatureName は、リクエストするモデルのシグネチャ名を指定します。

AddFeed(?)(inputName string, shape []int64{}, content []?)

  • オンライン予測サービスの TensorFlow モデルにリクエストを送信する際の入力テンソルを設定します。

  • パラメーター:

    • inputName: 入力テンソルのエイリアス。

    • shape: 入力テンソルのテンソルシェイプ。

    • content: 入力テンソルの内容。フラット化された 1次元配列として表現されます。サポートされる型は、INT32、INT64、FLOAT32、FLOAT64、STRING、BOOL です。メソッド名はデータ型によって異なります (例: AddFeedInt32())。その他のデータ型については、ソースコードを参照して PB フォーマットでリクエストを構築できます。

AddFetch(outputName string)

  • オンライン予測サービスの TensorFlow モデルにリクエストを送信する際の出力テンソルのエイリアスを設定します。

  • outputName は、取得する出力テンソルのエイリアスを指定します。

    SavedModel モデルの場合、このパラメーターはオプションです。このパラメーターが設定されていない場合、すべての出力が返されます。

    凍結モデルの場合、このパラメーターは必須です。

TFResponse

TensorFlow モデルからの出力データを解析します。

メソッド

説明

GetTensorShape(outputName string) []int64

  • 指定されたエイリアスの出力テンソルのテンソルシェイプを取得します。

  • outputName は、出力シェイプを取得するテンソルのエイリアスを指定します。

  • 戻り値: テンソルシェイプ。各次元が配列で表現されます。

Get(?)Val(outputName string) [](?)

  • 出力テンソルのデータベクトルを取得します。出力は 1次元配列です。このメソッドを GetTensorShape() メソッドと組み合わせて使用し、多次元テンソルを再構築します。サポートされる型は、FLOAT、DOUBLE、INT、INT64、STRING、BOOL です。メソッド名はデータ型によって異なります (例: GetFloatVal())。

  • outputName は、出力データを取得するテンソルのエイリアスを指定します。

  • 戻り値: 出力テンソルのフラット化されたデータを含む 1次元配列。

TorchRequest

PyTorch モデルの入力データを構築します。

メソッド

説明

TorchRequest()

TorchRequest クラスのコンストラクターです。

AddFeed(?)(index int, shape []int64{}, content []?)

  • オンライン予測サービスの PyTorch モデルにリクエストを送信する際の入力テンソルを設定します。

  • パラメーター:

    • index: 入力テンソルのインデックス。

    • shape: 入力テンソルのテンソルシェイプ。

    • content: 入力テンソルの内容。フラット化された 1次元配列として表現されます。サポートされる型は、INT32、INT64、FLOAT32、FLOAT64 です。メソッド名はデータ型によって異なります (例: AddFeedInt32())。その他のデータ型については、ソースコードを参照して PB フォーマットでリクエストを構築できます。

AddFetch(outputIndex int)

  • オンライン予測サービスの PyTorch モデルにリクエストを送信する際の出力テンソルのインデックスを設定します。このメソッドはオプションです。このメソッドを呼び出さない場合、すべての出力が返されます。

  • outputIndex は、出力テンソルのインデックスを指定します。

TorchResponse

PyTorch モデルからの出力データを解析します。

メソッド

説明

GetTensorShape(outputIndex int) []int64

  • 指定されたインデックスの出力テンソルのテンソルシェイプを取得します。

  • outputIndex は、出力テンソルのインデックスを指定します。

  • 戻り値: テンソルシェイプ。各次元が配列で表現されます。

Get(?)Val(outputIndex int) [](?)

  • 出力テンソルのデータベクトルを取得します。出力は 1次元配列です。このメソッドを GetTensorShape() メソッドと組み合わせて使用し、多次元テンソルを再構築します。サポートされる型は、FLOAT、DOUBLE、INT、INT64 です。メソッド名はデータ型によって異なります (例: GetFloatVal())。

  • outputIndex は、出力データを取得するテンソルのインデックスを指定します。

  • 戻り値: 出力テンソルのフラット化されたデータを含む 1次元配列。

QueueClient

EAS キュー サービスと連携して、データの生成、消費、管理を行います。

メソッド

説明

NewQueueClient(endpoint, queueName, token string) (*QueueClient, error)

  • QueueClient クラスのコンストラクターです。

  • パラメーター:

    • endpoint: サーバーのエンドポイントアドレス。

    • queueName: キュー サービスの名前。

    • token: キュー サービスのトークン。

  • 戻り値: 生成された QueueClient オブジェクト。

Truncate(ctx context.Context, index uint64) error

  • 指定されたインデックスより前のキュー内のデータを切り捨て、指定されたインデックス以降のデータのみを保持します。

  • パラメーター:

    • ctx: 現在の操作のコンテキスト。

    • index: 切り捨てるキュー内のデータのインデックス。

Put(ctx context.Context, data []byte, tags types.Tags) (index uint64, requestId string, err error)

  • キューにレコードを書き込みます。

  • パラメーター:

    • ctx: 現在の操作のコンテキスト。

    • data: キューに書き込むデータの内容。

  • 戻り値:

    • index: キュー内のデータレコードのインデックス。このインデックスを使用して、キューからデータをクエリできます。

    • requestId: データレコードに対して自動生成されるリクエスト ID。この ID は、レコードのクエリにも使用できる特別なタグです。

GetByIndex(ctx context.Context, index uint64) (dfs []types.DataFrame, err error)

  • インデックスによってキューからレコードを取得します。レコードは取得時にキューから自動的に削除されます。

  • パラメーター:

    • ctx: 現在の操作のコンテキスト。

    • index: キューからクエリするデータのインデックス。

  • dfs: クエリ結果。DataFrame オブジェクトとしてカプセル化されています。

GetByRequestId(ctx context.Context, requestId string) (dfs []types.DataFrame, err error)

  • リクエスト ID によってキューからレコードを取得します。レコードは取得時にキューから自動的に削除されます。

  • パラメーター:

    • ctx: 現在の操作のコンテキスト。

    • requestId: キューからクエリするデータのリクエスト ID。

  • dfs: クエリ結果。DataFrame オブジェクトとしてカプセル化されています。

Get(ctx context.Context, index uint64, length int, timeout time.Duration, autoDelete bool, tags types.Tags) (dfs []types.DataFrame, err error)

  • 指定された条件に基づいてキューからデータをクエリします。GetByIndex() メソッドと GetByRequestId() メソッドは、Get() メソッドのシンプルなラッパーです。

  • パラメーター:

    • ctx: 現在の操作のコンテキスト。

    • index: クエリするデータの開始インデックス。

    • length: クエリするデータレコードの数。index を含め、そこから始まる最大 length 件のレコードが返されます。

    • timeout: クエリの待機時間。この期間内に length 件のレコードが取得可能になると、呼び出しは直ちに戻ります。それ以外の場合、タイムアウトすると呼び出しが戻ります。

    • autoDelete: クエリされたデータをキューから自動的に削除するかどうかを指定するブール値。値が false の場合、データを繰り返しクエリできます。Del() メソッドを呼び出して、データを手動で削除できます。

    • tags: 指定されたタグを含むデータをクエリします。このパラメーターは map[string]string 型です。システムは、指定された index から始まる length 件のレコードを反復処理して、指定されたタグを含むデータを返します。

  • dfs: クエリ結果。DataFrame オブジェクトとしてカプセル化されています。

Del(ctx context.Context, indexes ...uint64)

  • 指定されたインデックスのデータをキューから削除します。

  • パラメーター:

    • ctx: 現在の操作のコンテキスト。

    • indexes: キューから削除するデータのインデックスのリスト。

Attributes() (attrs types.Attributes, err error)

  • キューの属性情報 (合計長と現在のデータ長を含む) を取得します。

  • attrs: キューの属性情報。map[string]string 型です。

Watch(ctx context.Context, index, window uint64, indexOnly bool, autocommit bool) (watcher types.Watcher, err error)

  • キュー内のデータをサブスクライブします。キュー サービスは、指定された条件に基づいてクライアントにデータをプッシュします。

  • パラメーター:

    • ctx: 現在の操作のコンテキスト。

    • index: サブスクリプションの開始インデックス。

    • window: サブスクリプションのウィンドウサイズ。これは、キュー サービスが一度に 1 つのクライアントインスタンスにプッシュできるレコードの最大数です。

      説明

      サーバーは、前のレコードがコミットされるまで新しいレコードをプッシュしません。N 件のレコードをコミットすると、キュー サービスはさらに N 件のレコードをプッシュします。これにより、クライアントが任意の時点でウィンドウサイズを超えるレコードを処理しないことが保証されるため、同時実行数を制限するのに役立ちます。

    • indexOnly: インデックス値のみをプッシュするかどうかを指定するブール値。

    • autocommit: レコードがプッシュされた後に自動的にコミットするかどうかを指定するブール値。このパラメーターを false に設定することを推奨します。レコードを受信して処理した後、手動でコミットしてください。コミット前にインスタンスが失敗した場合、キュー サービスは未コミットのデータを他のインスタンスに再配布して処理します。

  • 戻り値: プッシュされたデータの読み取りに使用できるウォッチャー オブジェクト。

Commit(ctx context.Context, indexes ...uint64) error

  • 指定されたインデックスのレコードをコミットします。

    説明

    コミットは、キュー サービスからプッシュされたデータが処理されたことを示します。その後、サービスはキューからデータを削除でき、他のインスタンスにプッシュされることはありません。

  • パラメーター:

    • ctx: 現在の操作のコンテキスト。

    • indexes: キュー内でコミットするデータのインデックスのリスト。

types.Watcher

キュー サービスのサブスクリプション チャネルからプッシュされたデータを読み取ります。

メソッド

説明

FrameChan() <-chan types.DataFrame

  • チャネルオブジェクトを返します。サーバーからプッシュされたデータはこのチャネルに書き込まれ、ループでこのチャネルからデータを読み取ることができます。

  • 戻り値: プッシュされたデータを読み取るためのチャネルオブジェクト。

Close()

ウォッチャー オブジェクトとそのバックエンド データ接続を閉じます。

説明

クライアントが一度に持てるアクティブなウォッチャー オブジェクトは 1 つだけです。新しいウォッチャー オブジェクトを作成する前に、現在のウォッチャー オブジェクトを閉じる必要があります。

フォーマット別の同期推論

サービスの入出力タイプに基づいて、コードサンプルを選択してください。

文字列

カスタムプロセッサを使用してサービスをデプロイする場合、通常は文字列を使用して呼び出します。例えば、PMML モデルサービスを呼び出す場合などです。次のプログラムは、完全な例です。

package main

import (
        "fmt"
        "github.com/pai-eas/eas-golang-sdk/eas"
)

func main() {
    client := eas.NewPredictClient("182848887922****.cn-shanghai.pai-eas.aliyuncs.com", "scorecard_pmml_example")
    client.SetToken("YWFlMDYyZDNmNTc3M2I3MzMwYmY0MmYwM2Y2MTYxMTY4NzBkNzdj****")
    client.Init()
    req := "[{\"fea1\": 1, \"fea2\": 2}]"
    for i := 0; i < 100; i++ {
        resp, err := client.StringPredict(req)
        if err != nil {
            fmt.Printf("failed to predict: %v\n", err.Error())
        } else {
            fmt.Printf("%v\n", resp)
        }
    }
}

TensorFlow

TensorFlow モデルの場合、入出力データフォーマットとして、それぞれ TFRequest と TFResponse を使用します。次のプログラムは、完全な例です。

package main

import (
        "fmt"
        "github.com/pai-eas/eas-golang-sdk/eas"
)

func main() {
    client := eas.NewPredictClient("182848887922****.cn-shanghai.pai-eas.aliyuncs.com", "mnist_saved_model_example")
    client.SetToken("YTg2ZjE0ZjM4ZmE3OTc0NzYxZDMyNmYzMTJjZTQ1YmU0N2FjMTAy****")
    client.Init()

    tfreq := eas.TFRequest{}
    tfreq.SetSignatureName("predict_images")
    tfreq.AddFeedFloat32("images", []int64{1, 784}, make([]float32, 784))

    for i := 0; i < 100; i++ {
        resp, err := client.TFPredict(tfreq)
        if err != nil {
            fmt.Printf("failed to predict: %v", err)
        } else {
            fmt.Printf("%v\n", resp)
        }
    }
}

PyTorch

PyTorch モデルの場合、入出力データフォーマットとして、それぞれ TorchRequest と TorchResponse を使用します。次のプログラムは、完全な例です。

package main

import (
        "fmt"
        "github.com/pai-eas/eas-golang-sdk/eas"
)

func main() {
    client := eas.NewPredictClient("182848887922****.cn-shanghai.pai-eas.aliyuncs.com", "pytorch_resnet_example")
    client.SetTimeout(500)
    client.SetToken("ZjdjZDg1NWVlMWI2NTU5YzJiMmY5ZmE5OTBmYzZkMjI0YjlmYWVl****")
    client.Init()
    req := eas.TorchRequest{}
    req.AddFeedFloat32(0, []int64{1, 3, 224, 224}, make([]float32, 150528))
    req.AddFetch(0)
    for i := 0; i < 10; i++ {
        resp, err := client.TorchPredict(req)
        if err != nil {
            fmt.Printf("failed to predict: %v", err)
        } else {
            fmt.Println(resp.GetTensorShape(0), resp.GetFloatVal(0))
        }
    }
}

VPC 専用接続

VPC 専用接続を使用すると、EAS 専用リソースグループにデプロイされたサービスにのみアクセスでき、そのリソースグループを指定した vSwitch に接続する必要があります。EAS 専用リソースグループの購入とネットワークの接続方法については、「EAS リソースグループの使用」および「パブリックリソースまたは内部リソースにアクセスするための EAS の設定」をご参照ください。標準的な呼び出しと比較して、この方法では client.SetEndpointType(eas.EndpointTypeDirect) という 1 行のコードを追加するだけで済むため、高トラフィック、高同時実行のサービスに適しています。次のコードは一例です。

package main

import (
        "fmt"
        "github.com/pai-eas/eas-golang-sdk/eas"
)

func main() {
    // VPC 専用接続エンドポイントのフォーマット: {uid}.vpc.{region-id}.pai-eas.aliyuncs.com。エンドポイントは、EAS コンソールのサービス詳細ページの [呼び出し情報] タブで確認できます。
    client := eas.NewPredictClient("182848887922****.vpc.cn-shanghai.pai-eas.aliyuncs.com", "scorecard_pmml_example")
    client.SetToken("YWFlMDYyZDNmNTc3M2I3MzMwYmY0MmYwM2Y2MTYxMTY4NzBkNzdj****")
    client.SetEndpointType(eas.EndpointTypeDirect)
    client.Init()
    req := "[{\"fea1\": 1, \"fea2\": 2}]"
    for i := 0; i < 100; i++ {
        resp, err := client.StringPredict(req)
        if err != nil {
            fmt.Printf("failed to predict: %v\n", err.Error())
        } else {
            fmt.Printf("%v\n", resp)
        }
    }
}

クライアント接続パラメーター

http.Transport プロパティを使用して、リクエストクライアントの接続パラメーターを設定できます。次の例に、これらの設定を構成する方法を示します。

package main

import (
        "fmt"
        "github.com/pai-eas/eas-golang-sdk/eas"
        "net/http"
        "time"
)

func main() {
    // VPC 専用接続エンドポイントのフォーマット: {uid}.vpc.{region-id}.pai-eas.aliyuncs.com。エンドポイントは、EAS コンソールのサービス詳細ページの [呼び出し情報] タブで確認できます。
    client := eas.NewPredictClient("182848887922****.vpc.cn-shanghai.pai-eas.aliyuncs.com", "network_test")
    client.SetToken("MDAwZDQ3NjE3OThhOTI4ODFmMjJiYzE0MDk1NWRkOGI1MmVhMGI0****")
    client.SetEndpointType(eas.EndpointTypeDirect)
    client.SetHttpTransport(&http.Transport{
        MaxConnsPerHost:       300,
        TLSHandshakeTimeout:   100 * time.Millisecond,
        ResponseHeaderTimeout: 200 * time.Millisecond,
        ExpectContinueTimeout: 200 * time.Millisecond,
    })
}

キューサービス

QueueClient を使用して、キューサービスへのデータの送信、データクエリ、キューサービスのステータスのクエリ、およびキューサービスからのデータプッシュのサブスクライブができます。この例では、1 つのゴルーチンがキューサービスにデータを送信し、別のゴルーチンがウォッチャーを使用してそのデータをサブスクライブして受信します。

説明

EAS で非同期推論サービスをデプロイすると、入力キューと出力キューが自動的に生成されます。アドレスは通常、次のフォーマットになります。

入力キュー: <domain>/api/predict/<service_name>

出力キュー: <domain>/api/predict/<service_name>/sink

要件に基づいて、<service_name> または <service_name>/sink を使用して QueueClient を構築します。

package main

import (
    "context"
    "fmt"
    "strconv"
    "time"

    "github.com/pai-eas/eas-golang-sdk/eas"
    "github.com/pai-eas/eas-golang-sdk/eas/types"
)

func main() {
    const (
        QueueEndpoint = "182848887922****.cn-shanghai.pai-eas.aliyuncs.com"
        // 例えば、EAS サービス名が test_qservice の場合、入力キュー名は test_qservice、出力キュー名は test_qservice/sink です。
        QueueName     = "test_qservice"
        QueueToken    = "YmE3NDkyMzdiMzNmMGM3ZmE4ZmNjZDk0M2NiMDA3OTZmNzc1MTUx****"
    )
    queue, err := eas.NewQueueClient(QueueEndpoint, QueueName, QueueToken)
    if err != nil {
        fmt.Printf("Failed to create queue client: %v\n", err)
        return
    }

    // キュー内のすべてのメッセージをトランケート
    attrs, err := queue.Attributes()
    if err == nil {
        if index, ok := attrs["stream.lastEntry"]; ok {
            idx, _ := strconv.ParseUint(index, 10, 64)
            queue.Truncate(context.Background(), idx+1)
        }
    }

    ctx, cancel := context.WithCancel(context.Background())

    // キューにメッセージを送信するゴルーチンを作成
    go func() {
        i := 0
        for {
            select {
            case <-time.NewTicker(time.Microsecond * 1).C:
                _, _, err := queue.Put(context.Background(), []byte(strconv.Itoa(i)), types.Tags{})
                if err != nil {
                    fmt.Printf("Error occured, retry to handle it: %v\n", err)
                }
                i += 1
            case <-ctx.Done():
                return
            }
        }
    }()

    // キューからのメッセージを監視するウォッチャーを作成
    watcher, err := queue.Watch(context.Background(), 0, 5, false, false)
    if err != nil {
        fmt.Printf("Failed to create a watcher to watch the queue: %v\n", err)
        return
    }

    // キューからメッセージを読み取り、手動でコミット
    for i := 0; i < 100; i++ {
        df := <-watcher.FrameChan()
        err := queue.Commit(context.Background(), df.Index.Uint64())
        if err != nil {
            fmt.Printf("Failed to commit index: %v(%v)\n", df.Index, err)
        }
    }

    // すべて完了したら、ウォッチャーを閉じる
    watcher.Close()
    cancel()
}

トラブルシューティング

Go 用 SDK の呼び出し例外 (認証、ルーティング、接続、サーバーに関する一般的な問題を含む) の症状、原因、およびトラブルシューティング方法については、「サービス呼び出し SDK」の「呼び出し例外のトラブルシューティング」セクションをご参照ください。

サービスステータスコード、エラーメッセージ、および推奨アクションの完全なリストについては、「付録:サービスステータスコードと一般的なエラー」をご参照ください。