时间:2016-12-20 19:51:55

标签: go cassandra

我在Cassandra中有一张表定义如下:

CREATE TABLE book.book 
(
    title text PRIMARY KEY,
    amount decimal,
    available int,
    createdon timestamp
) 

我正在尝试从该表中选择*并以json格式返回值。我能够使用

实现这一目标
type Book struct {
       Title       string       `json:"title"`
       Amount      inf.Dec      `json:"amount"`
       CreatedOn   time.Time    `json:"createdon"`
       Available   int          `json:"available"`
    }

 func cassandraDisplay(query string, w http.ResponseWriter) {
    cluster := gocql.NewCluster("xxxxxxxx:xxxx")
    session, _ := cluster.CreateSession()
    defer session.Close()
    iter := session.Query("SELECT * FROM book.book").Iter()
    var book Book
    for iter.Scan(&book.Title ,&book.Amount ,&book.CreatedOn,&book.Available{
           fmt.Println(book.Title , book.Amount,book.CreatedO,book.Available)
           j, ERR:= json.Marshal(&iter)
           if ERR != nil {panic(ERR)}
           //do things with j 
    }
   if err := iter.Close(); err != nil {log.Fatal(err)}
}

但要求需要动态且无需编码的任何信息;因为它是http服务,查询将通过url传递。

知道如何让它发挥作用吗?

1 个答案:

答案 0 :(得分:0)

@Michael,

You may want to use MapScan: https://godoc.org/github.com/gocql/gocql#Iter.MapScan 这是尽可能抽象的。 来自https://github.com/gocql/gocql/blob/master/cassandra_test.go

...
testMap := make(map[string]interface{})
if !session.Query(`SELECT * FROM slice_map_table`).Iter().MapScan(testMap) {
        t.Fatal("MapScan failed to work with one row")
}
...

之后你需要反映/探索地图内容,但这是一个不同的主题。