GO AWS SDK s3.GetObjectInput ist kein Typ

PHPz
Freigeben: 2024-02-08 22:33:19
nach vorne
926 Leute haben es durchsucht

GO AWS SDK s3.GetObjectInput 不是类型

php-Editor Yuzai ist bei der Verwendung des AWS SDK der GO-Sprache auf ein Problem gestoßen, das heißt, s3.GetObjectInput ist kein Typfehler. Dieser Fehler tritt häufig auf, wenn die GO-Sprache zum Aufrufen von AWS S3-Diensten verwendet wird. Dies bedeutet, dass die Parameter des Typs GetObjectInput falsch übergeben werden. Es gibt viele Möglichkeiten, dieses Problem zu lösen, einschließlich der Überprüfung, ob die Typdefinition im Code und die Parameterübergabe korrekt sind. Bevor wir dieses Problem lösen, wollen wir zunächst verstehen, um welchen Typ es sich bei GetObjectInput handelt und welche Rolle er im AWS S3-Service spielt.

Frageninhalt

Ich versuche, mit dem go sdk von AWS eine Datei von s3 herunterzuladen und dabei ähnliche Vorgänge wie im von AWS bereitgestellten Beispiel auszuführen: 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")
}
Nach dem Login kopieren

Wenn ich versuche, das Projekt zu erstellen, erhalte ich die Fehlermeldung: “github.com/aws/aws-sdk-go/service/s3”已导入但未使用 Und s3.getobjectinput 不是类型

Ich habe „Go Get on the Used Packages“ und „Go Mod Tidy“ ausgeführt, um meine go.mod-Dateien aufzuräumen. Es scheint vollkommen zufrieden mit der s3manager-Reihe und anderen aws-Paketen zu sein, es beschwert sich nur über s3-Referenzen.

Übersehe ich etwas Einfaches?

Lösung

Importierte Paketegithub.com/aws/aws-sdk-go/service/s3的包名为s3,通过s3 := record.s3ausblenden. Deshalb sehen Sie den Fehler.

Die vorgeschlagene Lösung besteht darin, s3 := record.s3 以选择其他身份。例如,s3entity := record.s3。不要忘记将源代码中的 s3.object.key 替换为 s3entity.object.key zu ändern.

Eine weitere Möglichkeit besteht darin, dem importierten Paket einen anderen Namen zu geben. Zum Beispiel:

import awss3 "github.com/aws/aws-sdk-go/service/s3"
Nach dem Login kopieren

Siehe den Abschnitt „Erklärungen und Geltungsbereich“ der Spezifikation:

Declaration bindet einen Bezeichner ungleich Null an eine Konstante, einen Typ, einen Typparameter, eine Variable, eine Funktion, ein Label oder ein Paket. ...

go verwendet Blöcke für die lexikalische Festlegung des Gültigkeitsbereichs:

  • Der Umfang der vordeklarierten Bezeichner ist der Universumsblock.
  • Gibt an, dass der Gültigkeitsbereich eines Bezeichners für eine Konstante, einen Typ, eine Variable oder eine Funktion (aber keine Methode), die auf der obersten Ebene (außerhalb einer Funktion) deklariert wird, der Paketblock ist.
  • Der Paketnamenbereich eines importierten Pakets ist der Dateiblock der Datei, die die Importdeklaration enthält.
  • Der Gültigkeitsbereich eines Bezeichners, der einen Methodenempfänger, Funktionsparameter oder eine Ergebnisvariable darstellt, ist der Funktionskörper.
  • Gibt an, dass der Bereich des durch einen Funktionstypparameter oder Methodenempfänger deklarierten Bezeichners nach dem Funktionsnamen beginnt und am Ende des Funktionskörpers endet.
  • Der Bereich der Bezeichner, die Typparameter eines Typs darstellen, beginnt nach dem Typnamen und endet am Ende der Typspezifikation.
  • Der Gültigkeitsbereich eines innerhalb einer Funktion deklarierten Konstanten- oder Variablenbezeichners beginnt am Ende der constspec oder varspec (shortvardecl für kurze Variablendeklarationen) und endet am Ende des innersten enthaltenden Blocks.
  • Der Gültigkeitsbereich eines in einer Funktion deklarierten Typbezeichners beginnt beim Bezeichner in der Typenspezifikation und endet am Ende des innersten enthaltenden Blocks.

In Blöcken deklarierte Bezeichner können in inneren Blöcken neu deklariert werden. Wenn ein inner-deklarierter Bezeichner im Gültigkeitsbereich liegt, stellt er die durch die innere Deklaration deklarierte Entität dar .

Siehe auch Einfuhrerklärung.

Das obige ist der detaillierte Inhalt vonGO AWS SDK s3.GetObjectInput ist kein Typ. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!