DynamoDB DeleteItem di Go (AWS SDK v2)

client.DeleteItem menerima sebuah dynamodb.DeleteItemInput yang membawa primary key lengkap. Dengan types.ReturnValueAllOld, responsnya memberi tahu apakah memang ada sesuatu di sana; begitu Anda menambahkan ConditionExpression, error-nya memberi tahu mengapa item itu tetap ada.

Kode

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)
	}
}

Penjelasan

  • types.ReturnValueAllOld adalah konstanta bertipe, bukan string "ALL_OLD" — field itu menerima types.ReturnValue, jadi salah ketik menjadi error kompilasi alih-alih ValidationException saat runtime. DeleteItem hanya menerima NONE dan ALL_OLD; sisa enum-nya dipakai bersama dengan UpdateItem.
  • len(out.Attributes) == 0 adalah satu-satunya sinyal yang Anda dapat — menghapus key yang memang tak pernah ada tetap berhasil, dan SDK mengembalikan map nil alih-alih error. Tak ada hal lain yang memisahkan "berhasil menghapus" dari "memang tak ada yang perlu dihapus".
  • Cocokkan kegagalan penjaga dengan errors.Asvar ccfe *types.ConditionalCheckFailedException lalu errors.As(err, &ccfe). Perbandingan langsung akan meleset, karena Go v2 membungkus fault layanan dalam operation error Smithy.
  • Exception itu bisa membawa item yang kalah — setel ReturnValuesOnConditionCheckFailure: types.ReturnValuesOnConditionCheckFailureAllOld dan ccfe.Item memuat baris itu persis seperti yang dilihat DynamoDB, jadi Anda bisa mencatat nilai yang sebenarnya gagal melewati penjaga alih-alih membacanya ulang. SDK mendokumentasikan harganya: "No read capacity units are consumed."
  • Satu item per panggilan — tidak ada API hapus-semua. Menghapus banyak item berarti mengumpulkan key-nya lebih dulu lalu mem-batch penulisannya, atau membuang tabelnya.

Lakukan secara visual

Penjaganya adalah bagian yang merepotkan: sebuah ConditionExpression plus map nama dan nilai yang menyertainya. DynamoDB Expression Builder merakit ketiganya dari sebuah formulir.

DynoTable menyerang risiko yang sama dari ujung yang lain. Penghapusan mendarat lebih dulu di panel Pending changes dan baru sampai ke tabel saat Anda melakukan commit, jadi baris yang salah adalah sesuatu yang Anda buang, bukan sesuatu yang harus Anda pulihkan. Unduh DynoTable.

Contoh terkait

Referensi

Terakhir diverifikasi 2026-07-28 terhadap dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.