All Products
Search
Document Center

Alibaba Cloud SDK:Integrasikan SDK

Last Updated:Jun 03, 2026

Integrasikan Alibaba Cloud SDK ke dalam proyek Go Anda untuk memanggil operasi OpenAPI. Proses ini mencakup tiga langkah: impor SDK, atur kredensial akses, dan panggil API.

Prasyarat

  • Go 1.10 atau yang lebih baru.

Impor SDK

  1. Masuk ke SDK Center dan pilih produk untuk API yang ingin Anda panggil, seperti Short Message Service (SMS).

  2. Pada halaman Installation , dan untuk All Languages, pilih Go. Kemudian, pada tab Quick Start, Anda dapat menemukan metode instalasi SDK untuk Short Message Service (SMS).image

Atur kredensial akses

Panggilan Alibaba Cloud OpenAPI memerlukan kredensial akses seperti AccessKey atau Security Token Service (STS) token. Simpan kredensial dalam variabel lingkungan untuk mencegah kebocoran. Praktik keamanan terbaik dijelaskan dalam Gunakan kredensial akses secara aman. Contoh berikut menggunakan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET:

Konfigurasi di Linux dan macOS

Konfigurasikan variabel lingkungan menggunakan perintah export

Penting

Variabel lingkungan sementara yang diatur menggunakan perintah export hanya berlaku untuk sesi saat ini. Variabel tersebut akan dihapus ketika sesi berakhir. Untuk penyimpanan jangka panjang (LTR), tambahkan perintah export ke file konfigurasi startup sistem operasi Anda.

  • Konfigurasikan ID AccessKey dan tekan Enter.

    # Ganti yourAccessKeyID dengan ID AccessKey Anda.
    export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyID
  • Konfigurasikan Rahasia AccessKey dan tekan Enter.

    # Ganti yourAccessKeySecret dengan Rahasia AccessKey Anda.
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecret
  • Verifikasi konfigurasi.

    Jalankan perintah echo $ALIBABA_CLOUD_ACCESS_KEY_ID. Jika perintah mengembalikan ID AccessKey yang benar, konfigurasi berhasil.

Konfigurasi di Windows

Gunakan antarmuka pengguna grafis (GUI)

  • Prosedur

    Langkah-langkah berikut menjelaskan cara mengatur variabel lingkungan menggunakan GUI di Windows 10.

    Di desktop Anda, klik kanan This PC dan pilih Properties > Advanced system settings > Environment Variables > New di bawah System variables atau User variables. Lalu, lengkapi konfigurasi.

    Variable

    Example value

    AccessKey ID

    • Variable name: ALIBABA_CLOUD_ACCESS_KEY_ID

    • Variable value: yourAccessKeyID

    AccessKey Secret

    • Variable name: ALIBABA_CLOUD_ACCESS_KEY_SECRET

    • Variable value: yourAccessKeySecret

  • Uji konfigurasi

    Klik Start (atau gunakan pintasan keyboard Win+R), klik Run, masukkan `cmd`, lalu klik OK (atau tekan Enter) untuk membuka command prompt. Jalankan perintah echo %ALIBABA_CLOUD_ACCESS_KEY_ID% dan echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Jika perintah mengembalikan AccessKey yang benar, konfigurasi berhasil.

Gunakan command prompt (CMD)

  • Prosedur

    Buka command prompt sebagai administrator dan jalankan perintah berikut untuk menambahkan variabel lingkungan baru ke sistem.

    setx ALIBABA_CLOUD_ACCESS_KEY_ID yourAccessKeyID /M
    setx ALIBABA_CLOUD_ACCESS_KEY_SECRET yourAccessKeySecret /M

    Parameter /M menunjukkan variabel lingkungan sistem. Anda dapat menghilangkan parameter ini saat mengatur variabel lingkungan pengguna.

  • Uji konfigurasi

    Klik Start (atau gunakan pintasan keyboard Win+R), klik Run, masukkan `cmd`, lalu klik OK (atau tekan Enter) untuk membuka command prompt. Jalankan perintah echo %ALIBABA_CLOUD_ACCESS_KEY_ID% dan echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Jika perintah mengembalikan AccessKey yang benar, konfigurasi berhasil.

Menggunakan Windows PowerShell

Di PowerShell, Anda dapat mengatur variabel lingkungan baru yang berlaku untuk semua sesi baru:

[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::User)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::User)

Untuk mengatur variabel lingkungan bagi semua pengguna, Anda harus memiliki izin administratif:

[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::Machine)

Anda juga dapat mengatur variabel lingkungan sementara yang hanya berlaku untuk sesi saat ini:

$env:ALIBABA_CLOUD_ACCESS_KEY_ID = "yourAccessKeyID"
$env:ALIBABA_CLOUD_ACCESS_KEY_SECRET = "yourAccessKeySecret"

Di PowerShell, jalankan perintah Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_ID dan Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_SECRET. Jika perintah mengembalikan AccessKey yang benar, konfigurasi berhasil.

Gunakan SDK

Contoh berikut memanggil API SendMessageToGlobe dari Short Message Service (SMS). Referensi API SendMessageToGlobe: SendMessageToGlobe.

1. Inisialisasi klien permintaan

Semua panggilan OpenAPI SDK V2.0 dilakukan melalui klien permintaan. Contoh ini menginisialisasi klien dengan AccessKey. Metode inisialisasi lainnya dijelaskan dalam Kelola kredensial akses.

Penting
  • Instans klien bersifat thread-safe. Anda tidak perlu instans terpisah untuk setiap thread.

  • Hindari pembuatan objek klien berulang — hal ini membuang sumber daya dan menurunkan performa. Gunakan pola singleton untuk memastikan satu klien per pasangan kredensial dan titik akhir sepanjang siklus hidup aplikasi.

import (
  openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  dysmsapi20180501 "github.com/alibabacloud-go/dysmsapi-20180501/v2/client"
  util "github.com/alibabacloud-go/tea-utils/v2/service"
  "os"
)

func CreateClient () (_result *dysmsapi20180501.Client, _err error) {
  config := &openapi.Config{
    // Wajib, pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID telah diatur.
    AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
    // Wajib, pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah diatur.
    AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
  }
  config.Endpoint = tea.String("dysmsapi.aliyuncs.com")
  _result = &dysmsapi20180501.Client{}
  _result, _err = dysmsapi20180501.NewClient(config)
  return _result, _err
}

2. Buat instans struct Request

Teruskan parameter API melalui struct `Request` SDK, bernama <Nama OpenAPI>Request (misalnya, `SendSmsRequest` untuk API `SendSms`). Detail parameter: SendMessageToGlobe.

Catatan

API tanpa parameter permintaan (seperti DescribeCdnSubList) tidak memerlukan objek permintaan.

// Buat objek permintaan dan atur parameter input yang diperlukan
sendMessageToGlobeRequest := &dysmsapi20180501.SendMessageToGlobeRequest{
  // Harap ganti dengan nomor penerima yang sebenarnya.
  To: tea.String("<YOUR_VALUE>"),
  // Harap ganti dengan konten SMS yang sebenarnya.
  Message: tea.String("<YOUR_VALUE>"),
}

3. Kirim permintaan

Panggil OpenAPI menggunakan fungsi <NamaAPI>WithOptions, yang menerima pointer ke struct Request API dan pointer ke struct opsi runtime. Opsi runtime mengontrol timeout, proxy, dan perilaku permintaan lainnya. Konfigurasi lanjutan.

Catatan

Untuk API tanpa parameter permintaan (seperti DescribeCdnSubList), cukup teruskan opsi runtime.

//  Anda perlu menambahkan util "github.com/alibabacloud-go/tea-utils/v2/service" ke impor. 

func _main() (_result *dysmsapi20180501.SendMessageToGlobeResponse, _err error) {
  client, _err := CreateClient()
  if _err != nil {
    return nil, _err
  }
  // Buat objek permintaan dan atur parameter input yang diperlukan
  sendMessageToGlobeRequest := &dysmsapi20180501.SendMessageToGlobeRequest{
    // Harap ganti dengan nomor penerima yang sebenarnya.
    To: tea.String("<YOUR_VALUE>"),
    // Harap ganti dengan konten SMS yang sebenarnya.
    Message: tea.String("<YOUR_VALUE>"),
  }
  runtime := &util.RuntimeOptions{}
  // Untuk menjalankan kode, salin dan cetak nilai kembali API.
  response, _err := client.SendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime)
  if _err != nil {
    return nil, _err
  }
  return response, _err
}

4. Tangani exception

SDK Go V2.0 mengkategorikan exception menjadi dua jenis utama: error dan SDKError.

  • error: Error non-bisnis, seperti error validasi akibat modifikasi file sumber SDK atau error parsing.

  • SDKError: Error yang terkait bisnis.

Panduan penanganan exception secara detail tersedia di Tangani exception.

Penting

Selalu tangani exception dengan menyebarkannya, mencatatnya, atau memulihkannya untuk memastikan stabilitas sistem.

Klik untuk melihat contoh kode lengkap

Contoh Pemanggilan API SendMessageToGlobe

package main

import (
  "fmt"
  openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  dysmsapi20180501 "github.com/alibabacloud-go/dysmsapi-20180501/v2/client"
  util "github.com/alibabacloud-go/tea-utils/v2/service"
  "github.com/alibabacloud-go/tea/tea"
  "os"
)

func CreateClient() (_result *dysmsapi20180501.Client, _err error) {
  config := &openapi.Config{
    // Wajib, pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID diatur.
    AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
    // Wajib, pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET diatur.
    AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
  }
  config.Endpoint = tea.String("dysmsapi.aliyuncs.com")
  _result = &dysmsapi20180501.Client{}
  _result, _err = dysmsapi20180501.NewClient(config)
  return _result, _err
}

func _main() (_result *dysmsapi20180501.SendMessageToGlobeResponse, _err error) {
  client, _err := CreateClient()
  if _err != nil {
    return nil, _err
  }
  // Buat objek permintaan dan atur parameter input yang diperlukan
  sendMessageToGlobeRequest := &dysmsapi20180501.SendMessageToGlobeRequest{
    // Harap ganti dengan nomor penerima yang sebenarnya.
    To: tea.String("<YOUR_VALUE>"),
    // Harap ganti dengan konten SMS yang sebenarnya.
    Message: tea.String("<YOUR_VALUE>"),
  }
  runtime := &util.RuntimeOptions{}
  // Untuk menjalankan kode, salin dan cetak nilai kembali API.
  response, _err := client.SendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime)
  if _err != nil {
    return nil, _err
  }
  return response, _err
}

func main() {
  response, err := _main()
  if err != nil {
    panic(err)
  }
  fmt.Println(response.Body)
}

Skenario khusus: Konfigurasikan API Advance untuk unggah file

Beberapa produk cloud (seperti Image Search dan Visual Intelligence API) memerlukan API Advance untuk unggah file lokal. API ini menerima aliran file, menyimpan file tersebut sementara di Alibaba Cloud OSS (wilayah default: cn-shanghai), lalu memprosesnya. Contoh ini menggunakan API DetectBodyCount dari Visual Intelligence API.

Catatan

File sementara yang disimpan di Alibaba Cloud OSS dihapus secara berkala.

  1. 1. Inisialisasi klien permintaan

    Atur baik RegionId maupun Endpoint. RegionId menentukan wilayah OSS untuk penyimpanan file sementara. Mengabaikan RegionId dapat menyebabkan timeout jika produk dan OSS berada di wilayah berbeda.

    import (
      "os"
    
      openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
      facebody20191230 "github.com/alibabacloud-go/facebody-20191230/v5/client"
      "github.com/alibabacloud-go/tea/tea"
    )
    
    func CreateClient() (_result *facebody20191230.Client, _err error) {
      config := &openapi.Config{
        // Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID diatur.
        AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
        // Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET diatur.
        AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
      }
      // Titik akhir dan regionId harus diatur ke wilayah yang sama.
      config.RegionId = tea.String("cn-shanghai")
      config.Endpoint = tea.String("facebody.cn-shanghai.aliyuncs.com")
      _result, _err = facebody20191230.NewClient(config)
      return _result, _err
    }
  2. Buat instans struct AdvanceRequest

    Gunakan struct AdvanceRequest (bernama <NamaAPI>AdvanceRequest) untuk meneruskan aliran file. Parameter aliran file bertipe io.Reader.

    // Ganti dengan path file.
    filePath := `<FILE_PATH>`
    // Buka file dan buat aliran.
    file, err := os.Open(filePath)
    if err != nil {
      return fmt.Errorf("Gagal membuka file: %v", err)
    }
    defer file.Close() // Tutup file.
    // Buat instans struct AdvanceRequest.
    detectBodyCountAdvanceRequest := &facebody20191230.DetectBodyCountAdvanceRequest{
      ImageURLObject: file,
    }
  3. Kirim permintaan

    Panggil <NamaAPI>Advance dengan pointer ke struct AdvanceRequest.

    // Anda perlu menambahkan util "github.com/alibabacloud-go/tea-utils/v2/service" ke impor.
    
    func _main() (response *facebody20191230.DetectBodyCountResponse, _err error) {
      client, _err := CreateClient()
      if _err != nil {
        return nil, _err
      }
    
      // Ganti dengan path file.
      filePath := `<FILE_PATH>`
      // Buka file dan buat aliran.
      file, err := os.Open(filePath)
      if err != nil {
        return nil, fmt.Errorf("Gagal membuka file: %v", err)
      }
      defer file.Close() // Tutup file.
      // Buat objek permintaan.
      detectBodyCountAdvanceRequest := &facebody20191230.DetectBodyCountAdvanceRequest{
        ImageURLObject: file,
      }
      runtime := &util.RuntimeOptions{}
      // Kirim permintaan.
      response, _err = client.DetectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime)
    
      if _err != nil {
        return nil, _err
      }
      return response, nil
    }

Klik untuk melihat contoh kode lengkap

package main

import (
  "fmt"
  "os"

  openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  facebody20191230 "github.com/alibabacloud-go/facebody-20191230/v5/client"
  util "github.com/alibabacloud-go/tea-utils/v2/service"
  "github.com/alibabacloud-go/tea/tea"
)

func CreateClient() (_result *facebody20191230.Client, _err error) {

  config := &openapi.Config{
    // Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID diatur.
    AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
    // Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET diatur.
    AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
  }
  config.RegionId = tea.String("cn-shanghai")
  config.Endpoint = tea.String("facebody.cn-shanghai.aliyuncs.com")
  _result, _err = facebody20191230.NewClient(config)
  return _result, _err
}

func _main() (response *facebody20191230.DetectBodyCountResponse, _err error) {
  client, _err := CreateClient()
  if _err != nil {
    return nil, _err
  }

  // Ganti dengan path file.
  filePath := `<FILE_PATH>`
  // Buka file dan buat aliran.
  file, err := os.Open(filePath)
  if err != nil {
    return nil, fmt.Errorf("Gagal membuka file: %v", err)
  }
  defer file.Close() // Tutup file.
  // Buat objek permintaan.
  detectBodyCountAdvanceRequest := &facebody20191230.DetectBodyCountAdvanceRequest{
    ImageURLObject: file,
  }
  runtime := &util.RuntimeOptions{}
  // Kirim permintaan.
  response, _err = client.DetectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime)

  if _err != nil {
    return nil, _err
  }
  return response, nil
}
func main() {
  response, err := _main()
  if err != nil {
    panic(err)
  }
  fmt.Println(response)
}

FAQ

  1. Pesan error "You are not authorized to perform this operation" dikembalikan saat saya memanggil OpenAPI.

    Penyebab dan solusi

    Penyebab: Pengguna Resource Access Management (RAM) yang sesuai dengan AccessKey Anda tidak memiliki izin yang diperlukan untuk memanggil API tersebut.

    Solusi: Berikan izin OpenAPI yang diperlukan kepada pengguna RAM. Kelola izin pengguna RAM.

    Sebagai contoh, jika error ini terjadi saat memanggil API SendMessageToGlobe, buat kebijakan kustom dan berikan ke pengguna RAM:

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "dysms:SendMessageToGlobe",
          "Resource": "*"
        }
      ]
    }
  2. Pesan error "SDKError: Message: Post "https://ecs-cn-XX.aliyuncs.com": dial tcp: lookup ecs-cn-XX.aliyuncs.com: no such host" dikembalikan saat saya memanggil OpenAPI.

    Penyebab dan solusi

    Penyebab: Titik akhir (Endpoint) yang Anda tentukan saat inisialisasi klien tidak didukung oleh OpenAPI yang Anda panggil.

    Solusi: Ubah Titik akhir dan coba lagi. Konfigurasikan titik akhir.

  3. Pesan error "SDKError: StatusCode: 404 Code: InvalidAccessKeyId.NotFound Message: code: 404, Specified access key is not found." dikembalikan saat saya memanggil OpenAPI.

    Penyebab dan solusi

    Penyebab: AccessKey tidak diteruskan dengan benar.

    Solusi: Verifikasi bahwa AccessKey diteruskan dengan benar saat inisialisasi klien. os.Getenv("XXX") mengambil nilai XXX dari variabel lingkungan.

Error SDK umum lainnya dan solusinya: FAQ.