首頁 > 後端開發 > Golang > GO AWS SDK s3.GetObjectInput 不是類型

GO AWS SDK s3.GetObjectInput 不是類型

PHPz
發布: 2024-02-08 22:33:19
轉載
959 人瀏覽過

GO AWS SDK s3.GetObjectInput 不是类型

php小編魚仔在使用GO語言的AWS SDK時,遇到了一個問題,即s3.GetObjectInput不是類型的錯誤。這個錯誤在使用GO語言呼叫AWS S3服務時經常遇到,它意味著GetObjectInput類型的參數傳遞錯誤。解決這個問題的方法有很多,包括檢查程式碼中的類型定義、參數傳遞是否正確等。在解決這個問題之前,我們先來了解GetObjectInput是什麼類型,以及它在AWS S3服務中的作用。

問題內容

我嘗試使用aws 的go sdk 從s3 下載文件,執行類似於aws 提供的範例中所做的操作:https://docs.aws.amazon.com /sdk-for-go /api/service/s3/

package main

import (
    "context"
    "fmt"
    "io/ioutil"
    "os"
    "path/filepath"

    "github.com/aws/aws-sdk-go/service/s3"
    "github.com/aws/aws-sdk-go/service/s3/s3manager"
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"

    "github.com/aws/aws-lambda-go/events"
    "github.com/aws/aws-lambda-go/lambda"
    "github.com/davidbyttow/govips/v2/vips"
)

func handler(ctx context.Context, s3Event events.S3Event) {
    for _, record := range s3Event.Records {
        s3 := record.S3

        sess, err := session.NewSession(&aws.Config{
            Region: aws.String("<REGION>"),
        })
        if err != nil {
            exitErrorf("cannot create s3 session, %v", err)
        }
    
        downloader := s3manager.NewDownloader(sess)

        file, err := os.Create(filepath.Base(s3.Object.Key))

        if err != nil {
            exitErrorf("DownloadFile:::Unable to open file, %v", err)
        }

        defer file.Close()

        numBytes, err := downloader.Download(file,
            &s3.GetObjectInput{
                Bucket: aws.String("<BUCKET>"),
                Key:    aws.String(s3.Object.Key),
            })

        if err != nil {
            exitErrorf("Unable to download item %q, %v", s3.Object.Key, err)
        }

        fmt.Println("Downloaded", file.Name(), numBytes, "bytes")
}
登入後複製

當我嘗試建立專案時,出現錯誤: 「github.com/aws/aws-sdk-go/service/s3」已匯入但未使用s3.getobjectinput 不是型別

我已經運行了 go get on 使用的軟體包和 go mod tidy 來整理我的 go.mod 檔案。它似乎對 s3manager 行和其他 aws 軟體包非常滿意,它只是抱怨 s3 引用。

我缺少一些簡單的東西嗎?

解決方法

導入的套件github.com/aws/aws-sdk-go/service/s3的套件名稱為s3,透過s3 := record.s3隱藏。這就是您看到錯誤的原因。

建議的解決方案是修改 s3 := record.s3 以選擇其他身分。例如,s3entity := record.s3。不要忘記將原始程式碼中的 s3.object.key 替換為 s3entity.object.key

另一個選項是為匯入的套件指定另一個名稱。例如:

import awss3 "github.com/aws/aws-sdk-go/service/s3"
登入後複製

參考規範的「宣告與範圍」部分

宣告將非空標識符綁定到常數、型別、型別參數、變數、函數、標籤或套件。 ...

go 使用區塊進行詞法作用域:

  • 預先宣告標識符的範圍是 universe 區塊。
  • 表示在頂層(任何函數外部)宣告的常數、類型、變數或函數(但不是方法)的標識符的範圍是包塊。
  • 導入包的包名範圍是包含導入宣告的檔案的檔案區塊
  • 表示方法接收者、函數參數或結果變數的識別碼的範圍是函數體。
  • 表示函數類型參數或方法接收者宣告的識別符的範圍從函數名稱之後開始,到函數體末尾結束。
  • 表示類型的型別參數的識別碼的範圍從型別名稱之後開始,到 typespec 結尾結束。
  • 函數內宣告的常數或變數標識符的範圍從 constspec 或 varspec(用於短變數宣告的 shortvardecl)結尾開始,到最內層包含區塊的結尾結束
  • 函數內部宣告的型別標識符的範圍從 typespec 中的標識符開始,到最內層包含區塊的末尾結束。

在區塊中宣告的標識符可以在內部區塊中重新宣告。當內部宣告的識別符在範圍內時,它表示內部宣告所宣告的實體

另請參閱導入聲明

以上是GO AWS SDK s3.GetObjectInput 不是類型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板