Golang:sqlx StructScan将db列映射到struct

时间:2016-12-29 10:00:47

标签: go

我的模型结构如下所示:

type Detail struct {
 Product
 Stocks
}
type Product struct {
 Name        string         `db:"name"`
 Id          int            `db:"id"`
}
type  Stocks { 
 Name        string         `db:"name"`
 Price       float          `db:"price"`
 Type        string         `db:"type"`
}

我会有一个查询加入上面的表格,如下所示:

query, args, err := sqlx.In("select p.name , s.price from Product   p,Stocks s where p.name=s.name and type IN (?)",typecodes)
query = s.Cmd.Db.Rebind(query)
var rows *sqlx.Rows
rows, err = s.Cmd.Db.Queryx(query, args...)

for rows.Next() {
          var p model.Detail
          err = rows.StructScan(&p)
}

想知道我什么时候 rows.StructScan(& p)将填充产品结构名称字段,或者是否会找到相同的任何气氛,因为Stocks也有一个名称字段?

目前我没有得到任何结果。但是当我评论Stocks结构中的名称字段时,我正在获取数据。

让我知道我在这里缺少什么。

1 个答案:

答案 0 :(得分:2)

对于含糊不清的字段,最好使用其结构名称的前缀对其进行注释,例如: product_namestock_name,然后在SQL语句中对它们进行适当的别名。

即。

type Detail struct {
 Product
 Stocks
}

type Product struct {
 Name        string         `db:"product_name"`
 Id          int            `db:"id"`
}

type  Stocks { 
 Name        string         `db:"stock_name"`
 Price       float          `db:"price"`
 Type        string         `db:"type"`
}

在你的SQL中:

SELECT p.name AS product_name, s.name AS stock_name, ... FROM Product p, Stocks s WHERE ...