in DynamoDB-SDK-Examples/golang/WorkingWithItems/putItemConditional.go [33:89]
func main() {
// Create Session
sess, err := session.NewSession(&aws.Config{
Region: aws.String("eu-west-1")},
)
// Create DynamoDB client
svc := dynamodb.New(sess)
// Address info
address := Address{
City: "Greenbank",
Country: "USA",
Pcode: "98253",
Road: "89105 Bakken Rd",
State: "WA",
}
// Item info
item := Item{
Pk: "jose.schneller@somewhere.com",
Sk: "metadata",
FirstName: "Jose",
LastName: "Schneller",
Name: "Jose Schneller",
Username: "joses",
Age: 27,
Address: address,
}
// Marshall
av, err := dynamodbattribute.MarshalMap(item)
if err != nil {
fmt.Println("Got error marshalling map:")
fmt.Println(err.Error())
os.Exit(1)
}
// Create item in table only if it doesn't already exist
input := &dynamodb.PutItemInput{
Item: av,
TableName: aws.String("RetailDatabase"),
ConditionExpression: aws.String("attribute_not_exists (pk) AND attribute_not_exists (sk)"),
}
_, err = svc.PutItem(input)
if err != nil {
fmt.Println("Got error calling PutItem:")
fmt.Println(err.Error())
os.Exit(1)
}
fmt.Println("Successfully added item to table")
}