全部產品
Search
文件中心

IoT Platform:Go SDK使用說明

更新時間:Jun 30, 2024

物聯網平台提供Go語言的雲端SDK供開發人員使用。本文介紹雲端Go SDK的安裝和配置,以及使用Go SDK調用雲端API的樣本。

安裝SDK

  1. 安裝Go開發環境。

    目前支援Go 1.13.0及以上版本。請訪問Go官網擷取。

  2. Go安裝完畢後,建立系統變數GOPATH,並將其指向您的代碼目錄。

    瞭解更多GOPATH相關資訊,請執行命令go help gopath

  3. 執行以下命令安裝阿里雲Go SDK,通過Go mod來管理專案依賴。

    重要
    • 以下命令安裝的SDK版本為樣本值,最新版本資訊,請參見OpenAPI門戶物聯網平台的SDK安裝方式。Go SDK的歷史版本資訊,請參見SDK的Code

      瞭解Go SDK詳細資料,請訪問alibabacloud-go-sdk

    • Go SDK安裝路徑預設為 $GOPATH/src/github.com/alibabacloud-go/iot-20180120,$GOPATH可以通過命令go env GOPATH查看。

      若Go SDK依賴包缺少,可執行命令go mod tidy拉取。

    go get github.com/alibabacloud-go/iot-20180120/v6

初始化SDK

  1. 建立對象config,存放SDK初始化資訊(AccessKey IDAccessKey Secret、地區ID等)。

  2. 通過iot.NewClient(config)方法載入SDK資訊,建立用戶端執行個體,完成SDK用戶端初始化。

以華東2(上海)地區及其服務接入地址為例,初始代碼如下。實際情境設定中,需使用您的物聯網平台服務所在地區。

import (
  "encoding/json"
  "strings"
  "fmt"
  "os"
  iot20180120  "github.com/alibabacloud-go/iot-20180120/v6/client"
  openapi  "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  util  "github.com/alibabacloud-go/tea-utils/v2/service"
  "github.com/alibabacloud-go/tea/tea"
)


/**
 * 使用AK&SK初始化帳號Client
 * @param accessKeyId
 * @param accessKeySecret
 * @return Client
 * @throws Exception
 */
func CreateClient (accessKeyId *string, accessKeySecret *string) (_result *iot20180120.Client, _err error) {
  config := &openapi.Config{
    // 必填,您的 AccessKey ID
    AccessKeyId: accessKeyId,
    // 必填,您的 AccessKey Secret
    AccessKeySecret: accessKeySecret,
  }
  // Endpoint 請參考 https://api.aliyun.com/product/Iot
  config.Endpoint = tea.String("iot.cn-shanghai.aliyuncs.com")
  _result = &iot20180120.Client{}
  _result, _err = iot20180120.NewClient(config)
  return _result, _err
}

func _main (args []*string) (_err error) {
  // 請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
  // 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例使用環境變數擷取 AccessKey 的方式進行調用,僅供參考,建議使用更安全的 STS 方式
  client, _err := CreateClient(tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")), tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")))
  if _err != nil {
    return _err
  }
  
  ......
}

參數

說明

accessKeyId

您阿里雲帳號的AccessKey ID。

您可在阿里雲官網控制台AccessKey管理中建立或查看您的AccessKey。

accessKeySecret

您阿里雲帳號的AccessKey Secret

RegionId

您的物聯網平台服務的地區ID,用於拼接服務接入地址,格式為:iot.${RegionId}.aliyuncs.com。

您可在物聯網平台控制台左上方,查看當前服務所在地區。

地區ID的表達方法,請參見地區和可用性區域

重要

為避免將AccessKey寫入程式碼到業務代碼中帶來的安全風險,可採用配置環境變數的方法管理AccessKey。

您需在本地作業系統中添加環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET,並分別寫入已準備好的AccessKey ID和AccessKey Secret。

在範例程式碼中可以通過以下方法擷取:

  • os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")

  • os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")

更多鑒權訪問方式,請參見管理訪問憑證

發起調用

物聯網平台雲端SDK為每個API封裝兩個類,分別命名為${API名稱}+"Request"${API名稱}+"Response",分別用於承載API的調用請求和調用結果。

調用步驟

  1. 已完成SDK用戶端初始化。具體內容,請參見初始化SDK

  2. 建立對應API的調用請求,產生${API名稱}+"Request"類對象執行個體request

  3. 通過對象執行個體request,使用request.${請求參數的名稱}方法,設定API所需的請求參數值。

  4. 建立${API名稱}+"Response"類的對象執行個體response承載響應結果:使用Client對象執行個體client${API名稱}(request)方法,擷取API對應request的響應結果,包含服務端響應的bodyheaders

物聯網平台雲端API,請參見API列表。有關request中請求參數說明,及response中返回參數說明,請參見對應API文檔。

本文以調用Pub介面發布訊息到Topic為例。請求參數資訊,請參見Pub

重要

以下代碼中iotInstanceId為執行個體ID。執行個體的詳細說明,請參見執行個體概述

購買執行個體方法,請參見購買企業版執行個體

	pubRequest := &iot20180120.PubRequest{
		ProductKey:     tea.String("${productKey}"),
		IotInstanceId:  tea.String("${iotInstanceId}"),
		DeviceName:     tea.String("${deviceName}"),
		TopicFullName:  tea.String("/${productKey}/${deviceName}/user/get"),
		MessageContent: tea.String("eyJ0ZXN0IjoidGFzayBwdWIgYnJvYWRjYXN0In0="),
	}
	runtime := &util.RuntimeOptions{}
	tryErr := func() (_e error) {
		defer func() {
			if r := tea.Recover(recover()); r != nil {
				_e = r
			}
		}()
		resp, _err := client.PubWithOptions(pubRequest, runtime)
		if _err != nil {
			return _err
		}

		console.Log(util.ToJSONString(resp))

		return nil
	}()

完整程式碼範例

說明

實際情境中,請參照上文的參數說明,替換對應參數值。

// This file is auto-generated, don't edit it. Thanks.
package main

import (
  "encoding/json"
  "strings"
  "fmt"
  "os"
  iot20180120  "github.com/alibabacloud-go/iot-20180120/v6/client"
  openapi  "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  util  "github.com/alibabacloud-go/tea-utils/v2/service"
  "github.com/alibabacloud-go/tea/tea"
)


/**
 * 使用AK&SK初始化帳號Client
 * @param accessKeyId
 * @param accessKeySecret
 * @return Client
 * @throws Exception
 */
func CreateClient (accessKeyId *string, accessKeySecret *string) (_result *iot20180120.Client, _err error) {
  config := &openapi.Config{
    // 必填,您的 AccessKey ID
    AccessKeyId: accessKeyId,
    // 必填,您的 AccessKey Secret
    AccessKeySecret: accessKeySecret,
  }
  // Endpoint 請參考 https://api.aliyun.com/product/Iot
  config.Endpoint = tea.String("iot.cn-shanghai.aliyuncs.com")
  _result = &iot20180120.Client{}
  _result, _err = iot20180120.NewClient(config)
  return _result, _err
}

func _main (args []*string) (_err error) {
  // 請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
  // 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例使用環境變數擷取 AccessKey 的方式進行調用,僅供參考,建議使用更安全的 STS 方式
  client, _err := CreateClient(tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")), tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")))
  if _err != nil {
    return _err
  }

  pubRequest := &iot20180120.PubRequest{
    // 產品ProductKey。
    ProductKey: tea.String("${productKey}"),
    // 物聯網平台執行個體ID。
    IotInstanceId: tea.String("${iotInstanceId}"),
    DeviceName: tea.String("${deviceName}"),
    // 要接收訊息的裝置的自訂Topic。
    TopicFullName: tea.String("/${productKey}/${deviceName}/user/get"),
    // 要發送的訊息主體:{"test":"task pub broadcast"}
    MessageContent: tea.String("eyJ0ZXN0IjoidGFzayBwdWIgYnJvYWRjYXN0In0="),
  }
  runtime := &util.RuntimeOptions{}
  tryErr := func()(_e error) {
    defer func() {
      if r := tea.Recover(recover()); r != nil {
        _e = r
      }
    }()
    // 複製代碼運行請自行列印 API 的傳回值
    _, _err = client.PubWithOptions(pubRequest, runtime)
    if _err != nil {
      return _err
    }

    return nil
  }()

  if tryErr != nil {
    var error = &tea.SDKError{}
    if _t, ok := tryErr.(*tea.SDKError); ok {
      error = _t
    } else {
      error.Message = tea.String(tryErr.Error())
    }
    // 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
    // 錯誤 message
    fmt.Println(tea.StringValue(error.Message))
    // 診斷地址
    var data interface{}
    d := json.NewDecoder(strings.NewReader(tea.StringValue(error.Data)))
    d.Decode(&data)
    if m, ok := data.(map[string]interface{}); ok {
      recommend, _ := m["Recommend"]
      fmt.Println(recommend)
    }
    _, _err = util.AssertAsString(error.Message)
    if _err != nil {
      return _err
    }
  }
  return _err
}


func main() {
  err := _main(tea.StringSlice(os.Args[1:]))
  if err != nil {
    panic(err)
  }
}

附錄:範例程式碼

前往物聯網平台雲端SDK樣本中心查看或下載API調用的範例程式碼。範例程式碼中包含Java、Python、PHP、Node.js、Go、C++和.NET等版本SDK樣本。

阿里雲OpenAPI開發人員門戶提供API線上調試工具。在API調試頁面,您可以快速檢索和體驗調用API。系統會根據您輸入的參數同步產生各語言SDK的程式碼範例。各語言SDK程式碼範例顯示在頁面右側SDK樣本頁簽下供您參考。在調用結果頁簽下,可查看API調用的真實請求URL和JSON格式的返回結果。