设为首页 收藏本站
查看: 855|回复: 0

[经验分享] dynamodb golang query one Item

[复制链接]

尚未签到

发表于 2018-9-20 10:32:20 | 显示全部楼层 |阅读模式
// +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(1)
  
}
  

  
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) > 0 {
  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 > 0 {
  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("1231241"),
  },
  },
  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 = 100
  c.Region = "ap-southeast-1"
  c.Table = "xxx_your_table_name"
  if len(c.Table) == 0 {
  //    flag.PrintDefaults()
  return fmt.Errorf("table name is required.")
  }
  

  return nil
  
}



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-598741-1-1.html 上篇帖子: Golang模拟客户端POST表单功能文件上传 下篇帖子: golang实现ios推送
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表