Go'da DynamoDB PutItem (AWS SDK v2)

PutItem bir öğenin tamamını yazar; onu oluşturur ya da aynı birincil anahtara sahip mevcut bir öğenin yerine geçer. Go v2 için AWS SDK'da, Item eşlemesi her özniteliği types paketinden türlü bir değer olarak tutan bir dynamodb.PutItemInput ile client.PutItem'i çağırırsınız.

Code

package main

import (
	"context"
	"errors"
	"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)

	_, err = client.PutItem(ctx, &dynamodb.PutItemInput{
		TableName: aws.String("Music"),
		Item: map[string]types.AttributeValue{
			"Artist":     &types.AttributeValueMemberS{Value: "Arturo Sandoval"},
			"SongTitle":  &types.AttributeValueMemberS{Value: "Cubano Chant"},
			"AlbumTitle": &types.AttributeValueMemberS{Value: "Danzon"},
			"Year":       &types.AttributeValueMemberN{Value: "1994"},
			"Awards":     &types.AttributeValueMemberN{Value: "0"},
		},
		ConditionExpression: aws.String("attribute_not_exists(#cond0) AND attribute_not_exists(#cond1)"),
		ExpressionAttributeNames: map[string]string{
			"#cond0": "Artist",
			"#cond1": "SongTitle",
		},
	})
	if err != nil {
		var ccf *types.ConditionalCheckFailedException
		if errors.As(err, &ccf) {
			fmt.Println("A song with that key already exists — not overwritten")
			return
		}
		log.Fatalf("put item: %v", err)
	}
	fmt.Println("Song written")
}

Item eşlemesini bunun yerine düz bir Go struct'ından oluşturmak için github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue'den attributevalue.MarshalMap'i kullanın.

Açıklama

  • Item — tablonun tam birincil anahtarını, artı diğer öznitelikleri içermelidir. Sayılar AttributeValueMemberN içinde dizedir ({Value: "1994"}).
  • Put yerine geçer — koşul olmadan PutItem, aynı anahtara sahip mevcut bir öğeyi sessizce üzerine yazar. Gerisini ezmeden birkaç özniteliği değiştirmek için UpdateItem kullanın.
  • ConditionExpression — anahtar öznitelikleri üzerinde attribute_not_exists(...), yazmayı yalnızca oluşturma amaçlı bir eklemeye dönüştürür; öğe zaten varsa yazma ConditionalCheckFailedException ile başarısız olur. Bu, DynamoDB'nin iyimser-kilitleme ilkelidir. #cond0/#cond1 takma adları ExpressionAttributeNames aracılığıyla Artist/SongTitle'a çözümlenir (ayrılmış sözcük güvenli).
  • errors.As — Go SDK'sı hizmet hatalarını sarmalar; bu nedenle türlü *types.ConditionalCheckFailedException'ı asla dize karşılaştırmasıyla değil, errors.As ile eşleştirin.
  • Üzerine yazılan öğeyi geri almak için ReturnValues: types.ReturnValueAllOld ayarlayın.

Görsel olarak yapın

Koşullu bir put'u elle mi yazıyorsunuz? DynamoDB Expression Builder, ConditionExpression'ı bir araya getirir ve kodu kopyalar.

Öğeleri bir grafik arayüzde (GUI) eklemek ve düzenlemek için — öznitelik başına bir form, tür seçiciler ve kod olarak kopyalama — DynoTable'ı indirin.

İlgili örnekler

References

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

Console olmadan DynamoDB ile çalışın

DynoTable, DynamoDB için hızlı bir masaüstü istemcisidir — tablolara göz atın, SQL tarzı sorgular çalıştırın ve item'ları yerel olarak düzenleyin.