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.ReturnValueAllOldadalah konstanta bertipe, bukan string"ALL_OLD"— field itu menerimatypes.ReturnValue, jadi salah ketik menjadi error kompilasi alih-alihValidationExceptionsaat runtime.DeleteItemhanya menerimaNONEdanALL_OLD; sisa enum-nya dipakai bersama denganUpdateItem.len(out.Attributes) == 0adalah 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.As—var ccfe *types.ConditionalCheckFailedExceptionlaluerrors.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.ReturnValuesOnConditionCheckFailureAllOlddanccfe.Itemmemuat 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
- DynamoDB DeleteItem di Java — penghapusan yang sama dengan AWS SDK for Java 2.x.
- DynamoDB PutItem di Go — sisi tulis dari key yang sama.
- Condition expression DynamoDB — jaga penghapusan dengan
attribute_existsdan pemeriksaan nilai. - DynamoDB ConditionalCheckFailedException — apa yang dilempar penghapusan bersyarat yang gagal, dan kapan itu memang diharapkan.
Referensi
- DeleteItem — Amazon DynamoDB API Reference
- Use DeleteItem with an AWS SDK or CLI — Amazon DynamoDB Developer Guide
- dynamodb package — AWS SDK for Go v2 (pkg.go.dev)
- dynamodb/types package — AWS SDK for Go v2 (pkg.go.dev)
- Condition expressions — Amazon DynamoDB Developer Guide
Terakhir diverifikasi 2026-07-28 terhadap dokumentasi resmi AWS yang ditautkan di atas.