DynamoDB PutItem di Go (AWS SDK v2)
PutItem menulis seluruh item, membuatnya atau menggantikan item apa pun yang sudah ada dengan primary key yang sama. Di AWS SDK for Go v2 Anda memanggil client.PutItem dengan dynamodb.PutItemInput yang map Item-nya menyimpan setiap atribut sebagai typed value dari package types.
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")
}Untuk membangun map Item dari struct Go biasa sebagai gantinya, gunakan attributevalue.MarshalMap dari github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue.
Penjelasan
Item— harus berisi primary key lengkap tabel, ditambah atribut lain apa pun. Angka berupa string di dalamAttributeValueMemberN({Value: "1994"}).- Put menggantikan — tanpa kondisi,
PutItemmenimpa secara diam-diam item yang sudah ada dengan key yang sama. GunakanUpdateItemuntuk mengubah beberapa atribut tanpa menghancurkan sisanya. ConditionExpression—attribute_not_exists(...)pada atribut key membuat penulisan menjadi insert create-only; penulisan gagal denganConditionalCheckFailedExceptionjika item sudah ada. Ini adalah primitif optimistic-locking DynamoDB. Alias#cond0/#cond1di-resolve keArtist/SongTitleviaExpressionAttributeNames(aman terhadap reserved word).errors.As— Go SDK membungkus error service, jadi cocokkan tipe*types.ConditionalCheckFailedExceptiondenganerrors.As, jangan pernah dengan perbandingan string.- Untuk mendapatkan kembali item yang tertimpa, set
ReturnValues: types.ReturnValueAllOld.
Lakukan secara visual
Menulis put bersyarat dengan tangan? DynamoDB Expression Builder menyusun ConditionExpression dan menyalin kodenya.
Untuk menambah dan mengedit item di GUI — form per atribut, pemilih tipe, dan copy-as-code — unduh DynoTable.
Contoh terkait
- DynamoDB PutItem di Java — penulisan bersyarat yang sama dengan AWS SDK for Java 2.x.
- DynamoDB UpdateItem di Go — ubah atribut tertentu alih-alih menggantikan item.
- DynamoDB condition expressions —
attribute_not_exists, optimistic locking, dan lainnya. - DynamoDB ConditionalCheckFailedException — apa yang dilempar kondisi create-only ketika item sudah ada.
- DynamoDB ValidationException — catch-all untuk item atau expression yang tidak valid.
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
Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.