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. 【转载】PyQt QSetting保存设置

    转载地址: http://blog.sina.com.cn/s/blog_4b5039210100h3zb.html 用户对应用程序经常有这样的要求:要求它能记住它的settings,比如窗口大小,位 ...

  2. dcraw源码解析

    dcraw源码解析 Author:Maddock Date:2015-04-22 转载请注明出处: 首先吐槽一点: 程序中使用了相当多的全局变量, 看的人头大.全局变量的坏处参看 http://wen ...

  3. LinQ和ADO.Net增删改查 备忘

    是否些倦了 SqlConnection conn=new SqlConnection();一系列繁冗的代码? 来试试Linq吧 查: using System.Data.SqlClient; name ...

  4. 转:WCF、WebAPI、WCFREST、WebService之间的区别

    WCF.WebAPI.WCFREST.WebService之间的区别   注明:转载 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API ...

  5. HDU 1512 Monkey King ——左偏树

    [题目分析] 也是堆+并查集. 比起BZOJ 1455 来说,只是合并的方式麻烦了一点. WA了一天才看到是多组数据. 盲人OI (- ̄▽ ̄)- Best OI. 代码自带大常数,比启发式合并都慢 [ ...

  6. Xcode UUID查询

    打开终端,输入: defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID

  7. Linux CentOS下安装Oracle

    1 .在安装oracle之前首先安装以下组件包,直接输入下列语句安装. yum install binutils* -y yum install compat-lib* -y yum install ...

  8. Xcode的清除缓存

    1.在“前往文件夹”中输入“   /Users/用户名/Library/Developer/Xcode/DerivedData  ”,然后删除里面的东西

  9. iOS编程中遇到的问题

    1.应用在iPhone6plus 系统iOS9.1安装时没遇到问题,在iPhone4s 系统iOS 7时bulid success 但是安装失败提示 There was an internal API ...

  10. c++字符串

    之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够.字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至 ...