<p>Currently looking at the pq standard library. Trying to find a way around needing to declare a variable for every column that you desire like in the example below.</p>
<p><code>
func (p *product) getProduct(db *sql.DB) error {
return db.QueryRow("SELECT name, price FROM products WHERE id=$1", p.ID).Scan(&p.Name, &p.Price)
</code>
I have a thought of querying for all the table names and creating a single string like </p>
<p><code>
SELECT (column1, column2, ....columnN) FROM table
</code></p>
<p>But that just seems silly.</p>
<hr/>**评论:**<br/><br/>kerakk19: <pre><p>If you know how many colums are there you can use somtehing like this:</p>
<pre><code>const numOfCols = your_nums_of_cols
type Data struct{
Items[]interface{} `json:"items"`
}
func (p *product) getProduct(db *sql.DB) (Data, error){
row := db.QueryRow("SELECT name, price FROM products WHERE id=$1", p.ID)
var data Data
data.Items = make([]interface{}, numOfCols)
for i := range data.Items {
data.Items[i] = &data.Items[i]
}
err = row.Scan(data.Items...)
if err != nil {
return data, err
}
return data, nil
}
</code></pre>
<p>If you don't know number of columns, you can use some kind of query to count it and base your numOfCols on it :)</p></pre>icholy: <pre><p>You can get the number of columns using the <code>(*Row).Columns()</code> method.</p></pre>forgiveangel: <pre><p>Wow thanks! Way more helpful then stackoverflow</p></pre>forgiveangel: <pre><blockquote>
<p>Items[]interface{} <code>json:"items"</code></p>
</blockquote>
<p>Do you mind explaining what this is? or the terminology so I could google it?</p>
<p>EDIT: I think I figured it, out. it's for JSON or to create a map?</p></pre>icholy: <pre><p>It's called a struct tag</p></pre>forgiveangel: <pre><p>How do I view the contents of the data? I was to print out the values from the table.</p></pre>kerakk19: <pre><p>You can range over the slice and do switch on interface types. </p>
<p>Still, i don't think this it is good practice to scan data from your queries like that. </p>
<p>The only way where i found it handy was when i had like 12 columns of the SAME type, so i could just run over slice without fear about data types.</p></pre>forgiveangel: <pre><p>Yeah... I realized that my initial project parameters were off</p></pre>kpurdon: <pre><p>With the database/sql binding libraries you must use <code>.Scan()</code> and pull into each variable separately. You may want to look into sqlx, specifically something like <a href="https://godoc.org/github.com/jmoiron/sqlx#StructScan" rel="nofollow">https://godoc.org/github.com/jmoiron/sqlx#StructScan</a>.</p></pre>natefinch: <pre><p>Or generate that sql code with Gnorm: Gnorm.org</p></pre>
这是一个分享于 的资源,其中的信息可能已经有所发展或是发生改变。
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码`
- 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传