Go (AWS SDK v2) ile DynamoDB DeleteItem
client.DeleteItem, tam birincil anahtarı taşıyan bir dynamodb.DeleteItemInput alır. types.ReturnValueAllOld ile yanıt, orada gerçekten bir şey olup olmadığını söyler; bir ConditionExpression eklediğinizde ise hata, neden kaldığını söyler.
Kod
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)
}
}Açıklama
types.ReturnValueAllOldtürlenmiş bir sabittir,"ALL_OLD"dizesi değil — alan birtypes.ReturnValuealdığı için bir yazım hatası, çalışma zamanında birValidationExceptionyerine derleme hatası olur.DeleteItemyalnızcaNONEveALL_OLDkabul eder; numaralandırmanın geri kalanıUpdateItemile paylaşılır.len(out.Attributes) == 0elinizdeki tek sinyaldir — hiç var olmamış bir anahtarı silmek başarılı olur ve SDK bir hata yerine nil bir harita döndürür. "Sildim" ile "silinecek bir şey yoktu" arasında başka hiçbir şey ayrım yapmaz.- Koruma başarısızlığını
errors.Asile eşleştirin —var ccfe *types.ConditionalCheckFailedException, ardındanerrors.As(err, &ccfe). Doğrudan bir karşılaştırma onu kaçırır, çünkü Go v2 hizmet hatalarını bir Smithy işlem hatasına sarar. - İstisna kaybeden öğeyi taşıyabilir —
ReturnValuesOnConditionCheckFailure: types.ReturnValuesOnConditionCheckFailureAllOldayarlayın;ccfe.Itemsatırı DynamoDB'nin gördüğü hâliyle tutar, böylece korumayı gerçekte hangi değerin geçemediğini yeniden okumak yerine günlükleyebilirsiniz. SDK bedelini belgeler: "No read capacity units are consumed." - Çağrı başına tek öğe — hepsini-sil API'si yoktur. Çok sayıda öğeyi silmek, önce anahtarları toplamak ve yazmaları toplu hâle getirmek ya da tabloyu düşürmek demektir.
Görsel olarak yapın
Zahmetli yarı korumadır: bir ConditionExpression artı onunla giden ad ve değer haritaları. DynamoDB Expression Builder üçünü de bir formdan birleştirir.
DynoTable aynı riske diğer uçtan saldırır. Bir silme önce Bekleyen değişiklikler panelinde iner ve tabloya ancak siz onu işlediğinizde ulaşır, dolayısıyla yanlış bir satır geri yüklediğiniz değil, attığınız bir şeydir. DynoTable'ı indirin.
İlgili örnekler
- Java ile DynamoDB DeleteItem — aynı silme, AWS SDK for Java 2.x ile.
- Go ile DynamoDB PutItem — aynı anahtarın yazma tarafı.
- DynamoDB koşul ifadeleri — silmeleri
attribute_existsve değer denetimleriyle koruyun. - DynamoDB ConditionalCheckFailedException — başarısız bir koşullu silmenin ne fırlattığı ve ne zaman beklendiği.
Kaynaklar
- 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
En son 2026-07-28 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.