Maison >développement back-end >Golang >GO AWS SDK s3.GetObjectInput n'est pas un type
L'éditeur php Yuzai a rencontré un problème lors de l'utilisation du SDK AWS du langage GO, c'est-à-dire que s3.GetObjectInput n'est pas une erreur de type. Cette erreur se produit souvent lors de l'utilisation du langage GO pour appeler les services AWS S3. Cela signifie que les paramètres de type GetObjectInput sont transmis de manière incorrecte. Il existe de nombreuses façons de résoudre ce problème, notamment en vérifiant si la définition du type dans le code et la transmission des paramètres sont correctes. Avant de résoudre ce problème, comprenons d'abord quel est le type GetObjectInput et son rôle dans le service AWS S3.
J'essaie d'utiliser le SDK go d'AWS pour télécharger un fichier depuis s3, en effectuant des opérations similaires à ce qui est fait dans l'exemple fourni par AWS : https://docs.aws.amazon.com/sdk-for- aller/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") }
Lorsque j'essaie de construire le projet, j'obtiens l'erreur :
“github.com/aws/aws-sdk-go/service/s3”已导入但未使用
et
s3.getobjectinput 不是类型
J'ai exécuté Go Get sur les packages utilisés et Go Mod Tidy pour ranger mes fichiers go.mod. Il semble parfaitement satisfait de la gamme s3manager et des autres packages AWS, il se plaint simplement des références s3.
Est-ce que j'ai raté quelque chose de simple ?
Le package importégithub.com/aws/aws-sdk-go/service/s3
的包名为s3
,通过s3 := record.s3
est masqué. C'est pourquoi vous voyez l'erreur.
La solution suggérée est de modifier s3 := record.s3
以选择其他身份。例如,s3entity := record.s3
。不要忘记将源代码中的 s3.object.key
替换为 s3entity.object.key
.
Une autre option consiste à donner un autre nom au package importé. Par exemple :
import awss3 "github.com/aws/aws-sdk-go/service/s3"
Référez-vous à la section « Déclarations et champ d'application » du Spécification :
La déclaration lie un identifiant non nul à une constante, un type, un paramètre de type, une variable, une fonction, une étiquette ou un package. ...
go utilise des blocs pour la portée lexicale :
Les identifiants déclarés dans les blocs peuvent être redéclarés dans les blocs internes. Lorsqu'un identifiant déclaré en interne est dans la portée, il représente l'entité déclarée par la déclaration interne .
Voir également Déclaration d'importation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!