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 dalam AttributeValueMemberN ({Value: "1994"}).
  • Put menggantikan — tanpa kondisi, PutItem menimpa secara diam-diam item yang sudah ada dengan key yang sama. Gunakan UpdateItem untuk mengubah beberapa atribut tanpa menghancurkan sisanya.
  • ConditionExpressionattribute_not_exists(...) pada atribut key membuat penulisan menjadi insert create-only; penulisan gagal dengan ConditionalCheckFailedException jika item sudah ada. Ini adalah primitif optimistic-locking DynamoDB. Alias #cond0/#cond1 di-resolve ke Artist/SongTitle via ExpressionAttributeNames (aman terhadap reserved word).
  • errors.As — Go SDK membungkus error service, jadi cocokkan tipe *types.ConditionalCheckFailedException dengan errors.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

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.