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ılarAttributeValueMemberNiç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çinUpdateItemkullanın. ConditionExpression— anahtar öznitelikleri üzerindeattribute_not_exists(...), yazmayı yalnızca oluşturma amaçlı bir eklemeye dönüştürür; öğe zaten varsa yazmaConditionalCheckFailedExceptionile başarısız olur. Bu, DynamoDB'nin iyimser-kilitleme ilkelidir.#cond0/#cond1takma adlarıExpressionAttributeNamesaracılığıylaArtist/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.Asile eşleştirin.- Üzerine yazılan öğeyi geri almak için
ReturnValues: types.ReturnValueAllOldayarlayı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
- Java'da DynamoDB PutItem — Java 2.x için AWS SDK ile aynı koşullu yazma.
- Go'da DynamoDB UpdateItem — öğeyi yerine geçirmek yerine belirli öznitelikleri değiştirin.
- DynamoDB koşul ifadeleri —
attribute_not_exists, iyimser kilitleme ve daha fazlası. - DynamoDB ConditionalCheckFailedException — öğe zaten var olduğunda yalnızca-oluşturma koşulunun fırlattığı hata.
- DynamoDB ValidationException — hatalı biçimlendirilmiş bir öğe veya ifade için genel hata.
References
- PutItem — Amazon DynamoDB API Reference
- Use PutItem 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)
- Handling errors — AWS SDK for Go v2 Developer Guide
- Condition expressions — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.