Go(AWS SDK v2)中的 DynamoDB DeleteItem

DeleteItem完整主键移除单个项目。在 AWS SDK for Go v2 中,你用一个 dynamodb.DeleteItemInput 调用 client.DeleteItem;配合 types.ReturnValueAllOld,响应会告诉你是否真的删除了什么。

Code

package main

import (
	"context"
	"fmt"
	"log"

	"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 main() {
	ctx := context.TODO()
	cfg, err := config.LoadDefaultConfig(ctx, config.WithRegion("us-east-1"))
	if err != nil {
		log.Fatalf("load config: %v", err)
	}
	client := dynamodb.NewFromConfig(cfg)

	out, err := client.DeleteItem(ctx, &dynamodb.DeleteItemInput{
		TableName: aws.String("Music"),
		Key: map[string]types.AttributeValue{
			"Artist":    &types.AttributeValueMemberS{Value: "Arturo Sandoval"},
			"SongTitle": &types.AttributeValueMemberS{Value: "Cubano Chant"},
		},
		ReturnValues: types.ReturnValueAllOld,
	})
	if err != nil {
		log.Fatalf("delete item: %v", err)
	}

	if len(out.Attributes) == 0 {
		fmt.Println("No item with that key existed")
	} else {
		fmt.Println("Deleted:", out.Attributes)
	}
}

说明

  • Key — 必须包含每个主键属性:简单键仅需分区键,复合键则需分区键排序键。
  • 删除是幂等的 — 删除一个不存在的键仍是成功(无错误)。配合 ReturnValues: types.ReturnValueAllOld,被删除的项目会在 out.Attributes 中返回;空映射意味着那里本来什么都没有。
  • DeleteItemReturnValues 仅支持 NONE(默认)和 ALL_OLDALL_NEW/UPDATED_* 选项属于 UpdateItem
  • 条件删除 — 加上一个 ConditionExpression(例如 attribute_exists(Artist) 以在项目缺失时失败,或做一次值守卫);失败的条件会返回一个 *types.ConditionalCheckFailedException,用 errors.As 匹配。
  • DeleteItem 每次调用移除一个项目。没有"删除全部"的 API——要清空一张表,请用 Scan 迭代键并批量删除,或删除表后重新创建。

可视化操作

用条件来保护删除?DynamoDB Expression Builder 会替你组装 ConditionExpression 以及名称/值映射。

想在 GUI 中删除项目——选中行、确认、完成,生成的代码只需一次点击即可获得——请下载 DynoTable

相关示例

References

Last verified 2026-07-13 against the official AWS documentation linked above.

无需控制台即可使用 DynamoDB

DynoTable 是面向 DynamoDB 的快速桌面客户端 —— 浏览表、运行 SQL 风格的查询,并在本地编辑项。