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 使用块进行词法作用域:
在块中声明的标识符可以在内部块中重新声明。当内部声明的标识符在范围内时,它表示内部声明所声明的实体。
另请参阅导入声明。
以上是GO AWS SDK s3.GetObjectInput 不是类型的详细内容。更多信息请关注PHP中文网其他相关文章!