DynamoDB UpdateItem di Go (AWS SDK v2)
UpdateItem mengubah atribut tertentu dari satu item (dan membuat item jika belum ada), membiarkan segala hal lain tidak tersentuh. Di AWS SDK for Go v2 Anda memanggil client.UpdateItem dengan UpdateExpression pada dynamodb.UpdateItemInput.
Code
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.UpdateItem(ctx, &dynamodb.UpdateItemInput{
TableName: aws.String("Music"),
Key: map[string]types.AttributeValue{
"Artist": &types.AttributeValueMemberS{Value: "Arturo Sandoval"},
"SongTitle": &types.AttributeValueMemberS{Value: "Cubano Chant"},
},
UpdateExpression: aws.String("SET #upd0 = :updValue0, #upd1 = :updValue1 ADD #upd2 :updValue2"),
ExpressionAttributeNames: map[string]string{
"#upd0": "Genre",
"#upd1": "Year",
"#upd2": "Awards",
},
ExpressionAttributeValues: map[string]types.AttributeValue{
":updValue0": &types.AttributeValueMemberS{Value: "Latin Jazz"},
":updValue1": &types.AttributeValueMemberN{Value: "1994"},
":updValue2": &types.AttributeValueMemberN{Value: "1"},
},
ReturnValues: types.ReturnValueAllNew,
})
if err != nil {
log.Fatalf("update item: %v", err)
}
fmt.Println(out.Attributes) // the item after the update
}Penjelasan
Key— primary key lengkap dari item yang diperbarui.UpdateExpression— satu atau lebih klausa:SETmenetapkan atribut (#upd0 = :updValue0men-setGenre;#upd1 = :updValue1men-setYear). Setiap atribut diberi alias viaExpressionAttributeNames, jadi reserved word sepertiYearselalu aman.ADDpada angka melakukan increment atomik (ADD #upd2 :updValue2menambah 1 keAwards) — aman di bawah konkurensi, tanpa race read-modify-write.REMOVEmenghapus sebuah atribut;DELETEmenghapus elemen dari sebuah set.
ExpressionAttributeValues— map:placeholder→ typed-value (AttributeValueMemberS/...MemberN).ReturnValues: types.ReturnValueAllNew— mengembalikan item lengkap setelah pembaruan diout.Attributes(jugaReturnValueUpdatedNew,ReturnValueAllOld,ReturnValueUpdatedOld, atauReturnValueNone).- Semantik upsert —
UpdateItemmembuat item jika key tidak ada. TambahkanConditionExpression(mis.attribute_exists(Artist)) untuk update-only. - Lebih suka membangun expression dalam kode? Package
expression(github.com/aws/aws-sdk-go-v2/feature/dynamodb/expression) menyusun klausaSET/ADDdan menghasilkan map name/value untuk Anda.
Lakukan secara visual
DynamoDB Expression Builder membangun klausa SET / ADD / REMOVE dengan map name/value dan menyalin kode yang bisa dijalankan.
Untuk mengedit item di GUI — ubah sebuah field, tinjau UpdateExpression yang dihasilkan, salin kodenya — unduh DynoTable.
Contoh terkait
- DynamoDB UpdateItem di Java — pembaruan yang sama dengan AWS SDK for Java 2.x.
- DynamoDB PutItem di Go — gantikan seluruh item sebagai gantinya.
- DynamoDB update expressions —
SET,ADD,REMOVE,DELETE, dan idiom. - Memahami ReturnValues — apa yang diberikan setiap opsi
ReturnValues. - "Attribute name is a reserved keyword" — mengapa map alias di sini tidak opsional.
- Error sintaks "Invalid UpdateExpression" — kesalahan sintaks SET/ADD yang umum, diuraikan.
References
- UpdateItem — Amazon DynamoDB API Reference
- Use UpdateItem 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)
- expression package — AWS SDK for Go v2 (pkg.go.dev)
- Update expressions — Amazon DynamoDB Developer Guide
Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.