You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SAM CLI开发Lambda的Go代码遇构建失败与导入异常

问题解决步骤

1. 修正包名拼写错误

你执行go get时的包名拼写有误,把featrues改成feature——正确的包路径是github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue。

2. 正确导入并使用类型包

你的代码错误地将attributevalue当成了dynamodb服务包下的类型,实际上DynamoDB的基础类型(包括AttributeValue)在service/dynamodb/types包中。另外Go语言会自动移除未被代码使用的导入,所以必须在代码中正确引用包内类型,导入语句才会保留。

修改后的完整代码:

package main

import (
    "context"
    "log"

    "github.com/aws/aws-lambda-go/events"
    "github.com/aws/aws-lambda-go/lambda"

    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/dynamodb"
    "github.com/aws/aws-sdk-go-v2/service/dynamodb/types"
)

func handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
    cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion("us-east-1"))
    if err != nil {
        log.Fatalf("unable to load SDK config, %v", err)
    }

    svc := dynamodb.NewFromConfig(cfg)

    resp, err := svc.UpdateItem(context.TODO(), &dynamodb.UpdateItemInput{
        TableName: aws.String("table-name"),
        Key: map[string]types.AttributeValue{
            "ID": &types.AttributeValueMemberS{Value: "visitors"},
        },
        UpdateExpression: aws.String("ADD visitors :inc"),
        ExpressionAttributeValues: map[string]types.AttributeValue{
            ":inc": &types.AttributeValueMemberN{Value: "1"},
        },
    })

    if err != nil {
        log.Fatalf("Got error calling UpdateItem: %s", err)
    }

    return events.APIGatewayProxyResponse{
        Headers: map[string]string{
            "Access-Control-Allow-Origin":  "*",
            "Access-Control-Allow-Methods": "*",
            "Access-Control-Allow-Headers": "*",
        },
        StatusCode: 200,
    }, nil
}

func main() {
    lambda.Start(handler)
}

3. 正确安装依赖

执行以下命令安装所需的AWS SDK v2包:

go get github.com/aws/aws-sdk-go-v2/service/dynamodb
go get github.com/aws/aws-sdk-go-v2/service/dynamodb/types

然后执行命令整理依赖并生成vendor目录:

go mod tidy
go mod vendor

关键说明

  • 你之前混淆了feature/dynamodb(提供高级操作封装)和service/dynamodb/types(定义DynamoDB基础类型)两个包,更新请求参数需要使用types包下的具体类型(如AttributeValueMemberS、AttributeValueMemberN)。
  • Go的模块工具会自动清理未被代码引用的导入,只要代码中正确使用了导入包的类型,导入语句就不会被自动删除。

内容的提问来源于stack exchange,提问作者echough1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 14:24:18