golang  dynamodb  query  oneItem  and unmarshal  to object

// +build example

package main

import (
// "flag"
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/dynamodb"
"github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute"
"os"
"time"
) func exitWithError(err error) {
fmt.Fprintln(os.Stderr, err)
os.Exit()
} func main() {
cfg := Config{}
if err := cfg.Load(); err != nil {
exitWithError(fmt.Errorf("failed to load config, %v", err))
} // Create the config specifiing the Region for the DynamoDB table.
// If Config.Region is not set the region must come from the shared
// config or AWS_REGION environment variable.
awscfg := &aws.Config{}
if len(cfg.Region) > {
awscfg.WithRegion(cfg.Region)
} // Create the session that the DynamoDB service will use.
sess, err := session.NewSession(awscfg)
if err != nil {
exitWithError(fmt.Errorf("failed to create session, %v", err))
} // Create the DynamoDB service client to make the query request with.
svc := dynamodb.New(sess) // Build the query input parameters
params := &dynamodb.ScanInput{
TableName: aws.String(cfg.Table),
}
if cfg.Limit > {
params.Limit = aws.Int64(cfg.Limit)
}
fmt.Println("params is: ", params)
// Make the DynamoDB Query API call
result, err := svc.Scan(params)
if err != nil {
exitWithError(fmt.Errorf("failed to make Query API call, %v", err))
} items := []Item{} // Unmarshal the Items field in the result value to the Item Go type.
err = dynamodbattribute.UnmarshalListOfMaps(result.Items, &items)
if err != nil {
exitWithError(fmt.Errorf("failed to unmarshal Query result items, %v", err))
} // Print out the items returned
for i, item := range items {
fmt.Printf("%d: UserID: %d, Time: %s Msg: %s Count: %d SecretKey:%s DeviceId: %s CampaginId:%s \n ", i, item.UserID, item.Time, item.Msg, item.Count, item.SecretKey, item.DeviceId, item.CampaginId)
//fmt.Printf("\tNum Data Values: %d\n", len(item.Data))
} /* //1231241 deviceid
params_del := &dynamodb.ScanInput{
TableName: aws.String(cfg.Table), }
*/
//query oneItem demo
params_get := &dynamodb.GetItemInput{
Key: map[string]*dynamodb.AttributeValue{
"deviceid": {
S: aws.String(""),
},
},
TableName: aws.String(cfg.Table), // Required
} resp, err_get := svc.GetItem(params_get)
oneItem := Item{}
if err_get == nil {
// resp is now filled
fmt.Printf("resp type is %T \n ", resp.Item)
err = dynamodbattribute.UnmarshalMap(resp.Item, &oneItem)
if err == nil {
fmt.Printf(" UserID: %d, Time: %s Msg: %s Count: %d SecretKey:%s DeviceId: %s CampaginId:%s \n ", oneItem.UserID, oneItem.Time, oneItem.Msg, oneItem.Count, oneItem.SecretKey, oneItem.DeviceId, oneItem.CampaginId)
} else {
fmt.Println(" Unmarshal err :", err)
}
//fmt.Println("convert to Struct obj err is ", err, "oneItem is:", oneItem)
} else {
fmt.Println("GetItem err is: ", err_get)
} } type Item struct {
UserID int // Hash key, a.k.a. partition key
Time time.Time // Range key, a.k.a. sort ke
Msg string `dynamo:"Message"`
Count int `dynamo:",omitempty"`
SecretKey string `dynamo:"-"` // Ignored
DeviceId string `dynamo:"deviceid"`
CampaginId string `dynamo:"campid"`
} type Config struct {
Table string // required
Region string // optional
Limit int64 // optional } func (c *Config) Load() error {
//flag.Int64Var(&c.Limit, "limit", 0, "Limit is the max items to be returned, 0 is no limit")
//flag.StringVar(&c.Table, "table", "", "Table to Query on")
//flag.StringVar(&c.Region, "region", "", "AWS Region the table is in")
//flag.Parse()
c.Limit =
c.Region = "ap-southeast-1"
c.Table = "xxx_your_table_name"
if len(c.Table) == {
// flag.PrintDefaults()
return fmt.Errorf("table name is required.")
} return nil
}

dynamodb golang query one Item的更多相关文章

  1. Golang原生sql操作Mysql数据库增删改查

    Golang要操作mysql数据库,首先需要在当期系统配置GOPATH,因为需要使用go get命令把驱动包下载到GOPATH下使用. 首先配置好你的GOPATH,执行以下命令,下载安装mysql驱动 ...

  2. Golang 接口型函数和http.Handler接口

    一.接口型函数 参考Golang必备技巧:接口型函数 1.原始接口实现 type Handler interface { Do(k, v interface{}) } func Each(m map[ ...

  3. Find Query Window的运作(手电筒)

    Find Query Window的運作?(手电筒) 提示: 在點選 Toolbar的 Find鈕時,系統會觸發 Query_Find此 Trigger. 執行 App_Find.Query_Find ...

  4. Understanding Item Import and Debugging Problems with Item Import (Doc ID 268968.1)

    In this Document Purpose Details   Scenario 1: Testing the basic item import with minimum columns po ...

  5. 8、vue路由跳转 params与query 路由传参

    params与query router文件下index.js里面,是这么定义路由的: { path: '/about', name: 'About', component: About } 用quer ...

  6. 【原创】3. MYSQL++ Query类型与SQL语句执行过程(非template与SSQLS版本)

    我们可以通过使用mysqlpp:: Query来进行SQL语句的增删改查. 首先来看一下mysqlpp::Query的一些最简单的调用, conn.connect(mysqlpp::examples: ...

  7. 计算广告(5)----query意图识别

    目录: 一.简介: 1.用户意图识别概念 2.用户意图识别难点 3.用户意图识别分类 4.意图识别方法: (1)基于规则 (2)基于穷举 (3)基于分类模型 二.意图识别具体做法: 1.数据集 2.数 ...

  8. jqgrid+bootstrap样式实践

    jqgrid+bootstrap样式实践,报错数据加载,选中,删除等功能 需要引入的样式 bootstrap.min.css ui.jqgrid.css 需要引入的JS jquery.min.js b ...

  9. 八月22日,django知识点总结:

    八月22日,知识点总结: python manage.py makemigrations python manage.py migrate unique=true是指这个字段的值在这张表里不能重复,所 ...

随机推荐

  1. Indy FTP 警告:Only one TIdAntiFreeze can be active in an application

    > Should I use a AntiFreeze component on every form I have a TIdTCPClient > component?  Or is ...

  2. PHP操作数据库

    一.PHP连接到MySQL // //比较规范的写法是地址,登录名,密码这样写,比较安全 define("DB_HOST", 'localhost'); define('DB_US ...

  3. android 第三方登录---新浪微博

    1.AndroidManiFest.xml设置,这里我只是简单的用授权,获取基本信息,所以只用了这一个 <!--微博--> <!-- 必须注册在微博授权,分享微博时候用到 --> ...

  4. SpringMVC学习(一)

    Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分. Web MVC架构 1.用户发起request请求至控制器(Controller) 控制接收用户请求的数 ...

  5. 基于GMap.Net的地图解决方案

    一 地图的加载与显示 关于GMap的介绍与使用可以看我以前的文章: GMap.Net开发之在WinForm和WPF中使用GMap.Net地图插件 GMap.Net是.Net下一个地图控件,可以基于Ht ...

  6. [译]:Orchard入门——构建你的第一个Orchard网站

    原文链接:Building Your First Orchard Site 文章内容基于Orchard 1.8版本 本文将逐步简要介绍Orchard提供的功能.如果你是第一次使用Orchard,本文将 ...

  7. Guava学习笔记(1):Optional优雅的使用null

    转自:http://www.cnblogs.com/peida/archive/2013/06/14/Guava_Optional.html 参考:[Google Guava] 1.1-使用和避免nu ...

  8. 关于DOM的一些操作 整理 积累

    var chils= s.childNodes;  //得到s的全部子节点 var par=s.parentNode;   //得到s的父节点 var ns=s.nextSbiling;   //获得 ...

  9. DOTA 2 Match History WebAPI(翻译)

    关于DOTA 2 Match History WebAPI 的 源网页地址: http://dev.dota2.com/showthread.php?t=47115 由于源网页全英文,这边做下翻译方便 ...

  10. 使用BigDecimal进行精确运算以及格式化输出数字

    一.引言    借用<Effactive Java>这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供 ...