我试图制作一篇可标记的文章。
文章表:
type Article struct {
ID int64
Body string
Tags string
}
准备价值观:
tags := r.FormValue("tags")
tagArray := fmt.Sprintf("%q", strings.Split(tags, ", ")) // How do I make use of this?
t := Article{
Body: "this is a post",
Tags: `{"apple", "orange"}`, // I have to hard code this for this to work.
}
if err := t.Insert(Db); err != nil {
// Error handling
}
数据库查询:
func (t *Article) Insert(db *sqlx.DB) error {
nstmt, err := db.PrepareNamed(`INSERT INTO articles
(body, tags)
VALUES (:body, :tags)
RETURNING *;
`)
if err != nil {
return err
}
defer nstmt.Close()
err = nstmt.QueryRow(t).StructScan(t)
if err, ok := err.(*pq.Error); ok {
return err
}
return err
}
标签的Postgres设置字段:
tags character varying(255)[] DEFAULT '{}',
似乎我必须对标签的值进行硬编码以使其工作。否则我会得到这样的错误:
pq: missing dimension value
OR
pq: array value must start with "{" or dimension information
如何使用tagArray
?
答案 0 :(得分:0)
您需要使用正确的数组输入格式格式化标记,与硬编码值相同。
如果代码不包含任何需要转义的特殊字符,那么以下代码将有效:strconv.Quote将如何转义它们:
tags := "apple, orange"
tagArray := strings.Split(tags, ", ")
for i, s := range tagArray {
tagArray[i] = strconv.Quote(s)
}
final := "{" + strings.Join(tagArray, ",") + "}"