数组 Varchar (psql) 到数组字符串 (golang)
Posted
技术标签:
【中文标题】数组 Varchar (psql) 到数组字符串 (golang)【英文标题】:Array Varchar (psql) to array string (golang) 【发布时间】:2016-05-24 04:23:51 【问题描述】:我想知道如何在我的 psql 数据库中以数组字符串的形式获取我的数组 varchar,以便在 json 中呈现它。
我确实是这样做的
在创建我的表时,我会这样创建我的列:
tags varchar(50)[] default NULL
当我使用我的选择请求在 golang 中获取它时:
var rowtags []uint8
err = rows.Scan(&rowtags)
if err != nil
log.Fatal(err)
我尝试制作一个将 uint8[] 转换为 string[] 的函数
func Uint8toString(array []uint8) []string
var ret = make([]string, len(array))
for i := 0; i < len(array); i++
ret[i] = string(array[i])
return (ret)
所以我应用了我的 var rowstag 的功能
var tags := Uint8toString(rowtags)
当我渲染 var 标签所在的结构时,我明白了
"Tags": [
"",
"#",
"c",
",",
"#",
"c",
",",
"#",
"c",
"o",
"u",
"c",
"o",
"u",
",",
"#",
"c",
"d",
""
],
我当然想要
"Tags": [
"#c",
"#c",
"#coucou",
"#cd"
],
谢谢你的帮助,我在golang上的时间很短,我没有找到解决方案。
【问题讨论】:
【参考方案1】:首先,为什么会有一个名为tags 的列包含多个tag 值?让另一个表与标签列当前所在的表具有外键,这样每个标签值都是它自己的行不是更好吗?如果你有这个,你应该能够做一些非常简单的事情,比如:
rows := db.QueryRow("SELECT tag from tags_table where foreign_key = 123")
var asSlice []string
err := row.Scan(&asSlice)
如果您必须将其全部放在一列中,是否可以将其存储为 JSON?然后你可以使用“encoding/json”包做一些简单的事情,比如:
func Uint8toString(array []uint8) []string
var stringArray []string
json.Unmarshal(array, &stringArray)
return stringArray
虽然我认为您应该重新考虑实现上述标签列的方式,但您也可以使用以下逻辑将其解析为字符串,但它假定格式将始终与您发布的内容相似:
func Uint8toString(array []uint8) []string
stringNoBrackets := string(array[1:len(array)-1])
return strings.Split(stringNoBrackets,",")
【讨论】:
是的,我也认为我需要重新考虑实现标签列的方式,但我真的很想知道将 varchar 数组转换为字符串数组的最佳方法,但感谢您的回答 底部的代码示例应该为您的结果生成一个字符串数组...可能有更简单的方法,但我不知道您的查询是什么样的,您是否尝试过传入引用 []string 而不是对 []unit8 的引用进入扫描? (参见第一个代码 sn-p)...这仍然可能有效,但不确定您的查询或表是什么样的 如果你尝试扫描到 *[]string,你会得到一个错误:sql: Scan error on column index 0: unsupported Scan, storing driver.Value type []uint8 into type *[]string
。 Scan 将从数据库中读取的列仅转换为常见 Go 类型的子集,不包括 []string。以上是关于数组 Varchar (psql) 到数组字符串 (golang)的主要内容,如果未能解决你的问题,请参考以下文章