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:
    • SET menetapkan atribut (#upd0 = :updValue0 men-set Genre; #upd1 = :updValue1 men-set Year). Setiap atribut diberi alias via ExpressionAttributeNames, jadi reserved word seperti Year selalu aman.
    • ADD pada angka melakukan increment atomik (ADD #upd2 :updValue2 menambah 1 ke Awards) — aman di bawah konkurensi, tanpa race read-modify-write. REMOVE menghapus sebuah atribut; DELETE menghapus elemen dari sebuah set.
  • ExpressionAttributeValues — map :placeholder → typed-value (AttributeValueMemberS/...MemberN).
  • ReturnValues: types.ReturnValueAllNew — mengembalikan item lengkap setelah pembaruan di out.Attributes (juga ReturnValueUpdatedNew, ReturnValueAllOld, ReturnValueUpdatedOld, atau ReturnValueNone).
  • Semantik upsertUpdateItem membuat item jika key tidak ada. Tambahkan ConditionExpression (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 klausa SET/ADD dan 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

References

Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

DynoTable adalah klien desktop yang cepat untuk DynamoDB — jelajahi tabel, jalankan query gaya SQL, dan edit Item secara lokal.