aws-sdk-go-v2-wrapper | DynamoDB
import (
"context"
"github.com/evalphobia/aws-sdk-go-v2-wrapper/config"
"github.com/evalphobia/aws-sdk-go-v2-wrapper/dynamodb"
)
func main () {
svc , err := dynamodb .New (config.Config {
AccessKey : "<...>" ,
SecretKey : "<...>" ,
})
if err != nil {
panic (err )
}
ctx := context .Background ()
item , err := svc .GetSingleItem (ctx , dynamodb.XGetSingleItem {
TableName : "users" ,
HashKeyName : "user_id" ,
HashKeyValue : 101 ,
RangeKeyName : "session_id" ,
RangeKeyValue : "sess-abcdefg123456" ,
})
if err != nil {
panic (err )
}
mm := dynamodb .ToMapValue (item )
if mm ["user_id" ] != 101 {
panic ("`user_id` should be `101`" )
}
if mm ["session_id" ] != "sess-abcdefg123456" {
panic ("`session_id` should be `sess-abcdefg123456`" )
}
// ...
}
Name
Description
XBatchDeleteItems
deletes multiple items using 'BatchWriteItems'.
XDeleteTableFromName
deletes a table.
XExistTable
checks if the table already exists or not.
XForceDeleteAll
deletes all data in the table.
XGetSingleItem
gets single item.
data := map [string ]interface {}{
"user_id" : 101 ,
"session_id" : "sess-abcdefg123456" ,
}
m , err := dynamodb .MarshalToMap (data )
if err != nil {
return err
}
svc .PutItem (ctx , dynamodb.PutItemRequest {
TableName : "users" ,
Item : m ,
})
result , err := svc .Query (ctx , dynamodb.QueryRequest {
TableName : "users" ,
IndexName : "gsi-foobar" ,
// Select: dynamodb.SelectCount,
Limit : 1 ,
XConditions : dynamodb.XConditions {
KeyConditions : []dynamodb.XCondition {
{
Name : "user_id" ,
Value : 101 ,
Operator : dynamodb .ComparisonOperatorEq ,
},
{
Name : "session_id" ,
Value : "sess-abcdefg123456" ,
Operator : dynamodb .ComparisonOperatorEq ,
},
},
},
})
if err != nil {
return err
}
if result .Count != 1 {
panic ("result should be one item" )
}
mm := result .ToSliceMap ()
if len (mm ) != 1 {
panic ("result should be one item" )
}
if mm ["user_id" ] != 101 {
panic ("`user_id` should be `101`" )
}
if mm ["session_id" ] != "sess-abcdefg123456" {
panic ("`session_id` should be `sess-abcdefg123456`" )
}
_ , err = svc .UpdateItem (ctx , dynamodb.UpdateItemRequest {
TableName : "users" ,
// [WHERE user_id = 101 AND session_id = 'sess-abcdefg123456'] in SQL
Key : map [string ]dynamodb.AttributeValue {
"user_id" : dynamodb.AttributeValue {
Number : 101 ,
},
"session_id" : dynamodb.AttributeValue {
String : "sess-abcdefg123456" ,
},
},
ReturnValues : dynamodb .ReturnValueNone ,
XConditions : dynamodb.XConditions {
Updates : []dynamodb.XUpdateCondition {
// change email address
// [UPDATE SET email = 'example@example.com'] in SQL
{
Name : "email" ,
Value : "example@example.com" ,
Operation : dynamodb .OperationModeSET , // you can omit `set` parameter
},
// increment age
// [UPDATE SET age = age + 1] in SQL
{
Name : "age" ,
Value : 1 ,
Operation : dynamodb .OperationModeADD ,
},
},
// DO NOT create new item when p-key does not exist.
Conditions : []dynamodb.XCondition {
{
Name : "user_id" ,
Operator : dynamodb .ComparisonOperatorAttrExists ,
},
},
},
})