editor php Yuzai menghadapi masalah apabila menggunakan AWS SDK bahasa GO, iaitu, s3.GetObjectInput bukan ralat jenis. Ralat ini sering ditemui apabila menggunakan bahasa GO untuk memanggil perkhidmatan AWS S3 Ini bermakna parameter jenis GetObjectInput dihantar secara salah. Terdapat banyak cara untuk menyelesaikan masalah ini, termasuk menyemak sama ada definisi jenis dalam kod dan hantaran parameter adalah betul. Sebelum menyelesaikan masalah ini, mari kita fahami dahulu jenis GetObjectInput dan peranannya dalam perkhidmatan AWS S3.
Saya cuba menggunakan AWS's go sdk untuk memuat turun fail daripada s3, melakukan operasi yang serupa dengan apa yang dilakukan dalam contoh yang disediakan oleh 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") }
Apabila saya cuba membina projek, saya mendapat ralat:
“github.com/aws/aws-sdk-go/service/s3”已导入但未使用
dan
s3.getobjectinput 不是类型
Saya telah berlari pergi dapatkan pakej terpakai dan pergi mod kemas untuk mengemas fail go.mod saya. Nampaknya sangat gembira dengan barisan s3manager dan pakej aws lain, ia hanya mengeluh tentang rujukan s3.
Adakah saya kehilangan sesuatu yang mudah?
Pakej importgithub.com/aws/aws-sdk-go/service/s3
的包名为s3
,通过s3 := record.s3
tersembunyi. Itulah sebabnya anda melihat ralat.
Penyelesaian yang dicadangkan ialah mengubah suai s3 := record.s3
以选择其他身份。例如,s3entity := record.s3
。不要忘记将源代码中的 s3.object.key
替换为 s3entity.object.key
.
Pilihan lain ialah memberi nama lain pada pakej yang diimport. Contohnya:
import awss3 "github.com/aws/aws-sdk-go/service/s3"
Rujuk bahagian "Pengisytiharan dan Skop" dalam Spesifikasi:
Pengisytiharan mengikat pengecam bukan nol kepada pemalar, jenis, parameter jenis, pembolehubah, fungsi, label atau pakej. ...
go menggunakan blok untuk skop leksikal:
Pengecam yang diisytiharkan dalam blok boleh diisytiharkan semula dalam blok dalaman. Apabila pengecam pengisytiharan dalaman berada dalam skop, ia mewakili entiti yang diisytiharkan oleh pengisytiharan dalaman .
Lihat juga Penyata Import.
Atas ialah kandungan terperinci GO AWS SDK s3.GetObjectInput bukan jenis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!