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.ReturnValueAllOld türlenmiş bir sabittir, "ALL_OLD" dizesi değil — alan bir types.ReturnValue aldığı için bir yazım hatası, çalışma zamanında bir ValidationException yerine derleme hatası olur. DeleteItem yalnızca NONE ve ALL_OLD kabul eder; numaralandırmanın geri kalanı UpdateItem ile paylaşılır.
  • len(out.Attributes) == 0 elinizdeki 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.As ile eşleştirinvar ccfe *types.ConditionalCheckFailedException, ardından errors.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şıyabilirReturnValuesOnConditionCheckFailure: types.ReturnValuesOnConditionCheckFailureAllOld ayarlayın; ccfe.Item satı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

Kaynaklar

En son 2026-07-28 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.