Home >Backend Development >Golang >GO AWS SDK s3.GetObjectInput is not a type
php Xiaobian Yuzai encountered a problem when using the AWS SDK of GO language, that is, s3.GetObjectInput is not a type error. This error is often encountered when using the GO language to call AWS S3 services. It means that the parameters of the GetObjectInput type are passed incorrectly. There are many ways to solve this problem, including checking whether the type definition in the code and parameter passing are correct. Before solving this problem, let's first understand what type GetObjectInput is and its role in the AWS S3 service.
I try to use aws's go sdk to download files from s3, performing operations similar to what is done in the example provided by 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") }
When I try to build the project, I get the error:
"github.com/aws/aws-sdk-go/service/s3" is imported but not used
and
s3.getobjectinput is not a type
I've run go get on the packages used and go mod tidy to tidy up my go.mod files. It seems perfectly happy with the s3manager line and other aws packages, it just complains about s3 references.
Am I missing something simple?
The package name of the imported package github.com/aws/aws-sdk-go/service/s3
is s3
, Hidden by s3 := record.s3
. That's why you see the error.
The suggested solution is to modify s3 := record.s3
to select a different identity. For example, s3entity := record.s3
. Don't forget to replace s3.object.key
with s3entity.object.key
in your source code.
Another option is to specify another name for the imported package. For example:
import awss3 "github.com/aws/aws-sdk-go/service/s3"
Refer to the "Declarations and Scope" section of the specification:
Declaration binds a non-null identifier to a constant, type, type parameter, variable, function, label, or package. ...
go Use blocks for lexical scoping:
Identifiers declared in blocks can be redeclared in inner blocks. When an inner-declared identifier is in scope, it represents the entity declared by the inner declaration.
See also Import declarations.
The above is the detailed content of GO AWS SDK s3.GetObjectInput is not a type. For more information, please follow other related articles on the PHP Chinese website!