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. Sass中文乱码问题(手动编译和watch编译)

    一.sass手动编译出错 .scss文件中含有中文的时候编译报错(比如注释,比如字体栈),比如: foo.scss: 编译: 解决办法: 找到类似这个的路径的文件(仅供参考,不同环境可能不同): C: ...

  2. windows2008r2的时间同步小结

    一.在windows2008r2域控的环境下进行时间同步的配置(当已经拥有可以使用的ntp服务器,并知晓ip,客户端到其网络正常): 客户端的配置过程如下: 1.搜索窗口输入 gpedit.msc 打 ...

  3. Django【进阶篇 】

    Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...

  4. MVC 好记星不如烂笔头之 ---> 页面压缩GIP

    public class BaseController : Controller { /// <summary> /// Called before the action method i ...

  5. 初学微信小程序

    最近微信推出了微信小程序,为此我学了几天,基本了解了组件及简单语法,但是今天我自己想要独立写一个demo时,忽然发现难道我的不是微信小程序的语法(我以前是iOS 开发,不用css),而是css样式的设 ...

  6. IDF实验室:牛刀小试

    被改错的密码[从格式和长度来推测出是MD5] 迷醉..人生第一道ctf题?据说是因为看起来像是MD5加密的格式,但是数了一下发现有33个字符,就推测???熊孩子多敲了一位进去.从32个变33个了,然后 ...

  7. node.js安装

    Node.js是一个基于Chrome JavaScript运行时建立的一个平台,用来方便地搭建快速的,易于扩展的网络应用Node.js借助事件驱动,非阻塞I/O模型变得轻量和高效,非常适合run ac ...

  8. 如何保存微信的小视频 How to keep WeChat 'Sights'

    微信小视频非常方便,但很难将其下载到本地电脑长期保存.网上有介绍方法,如百度经验上办法,但目前看来它可能只适用安卓系统,而且或已失效(可能由于版本更新).对Windows Phone无效,而对于更加封 ...

  9. android Context 持有导致的内存泄漏

    Context使用场景 为了防止Activity,Service等这样的Context泄漏于一些生命周期更长的对象,可以使用生命周期更长的ApplicationContext,但是不是所有的Conte ...

  10. PHP TCPDF ERROR: [Image] Unable to get image解决办法详解

    使用TCPDF输出pdf文件时,有时会直接显示pdf文件不可显示,仔细调试之下会报错TCPDF ERROR: [Image] Unable to get image.问题出现Image()函数中.第一 ...