我试图找到解决此问题的方法,但是请继续保持这种状态。
该函数是Go SQL包装器的一部分,调用getJSON函数可从sql响应中提取信息。
问题是,id参数变得乱码并且与所需的响应不匹配,您读取的所有其他参数都是正确的,所以这真的使我感到奇怪。
预先感谢您为解决此问题所做的任何尝试,非常感谢:-)
func getJSON(rows *sqlx.Rows) ([]byte, error) {
columns, err := rows.Columns()
rawResult := make([][]byte, len(columns))
dest := make([]interface{}, len(columns))
for i := range rawResult {
dest[i] = &rawResult[i]
}
defer rows.Close()
var results []map[string][]byte
for rows.Next() {
result := make(map[string][]byte, len(columns))
rows.Scan(dest...)
for i, raw := range rawResult {
if raw == nil {
result[columns[i]] = []byte("")
} else {
result[columns[i]] = raw
fmt.Println(columns[i] + " : " + string(raw))
}
}
results = append(results, result)
}
s, err := json.Marshal(results)
if err != nil {
panic(err)
}
rows.Close()
return s, nil
}
来自终端的响应示例:id : r�b�X��M���+�2%
name : cat
issub : false
预期结果:id : E262B172-B158-4DEF-8015-9BA12BF53225
name : cat
issub : false
最佳答案
这与类型转换无关。
UUID(任何类型;目前有四种)被定义为128位长的字节块,即128/8=16
字节。
这意味着任何字节-不一定可打印。
您所需要的是UUID值的字符串表示形式,
由于以16为基数的位置计数使用一个数字(“0”至“F”)表示0到15的值,因此单个字节由两个这样的数字表示-每4位每组一个数字。
我认为任何明智的UUID程序包都应实现“解码”功能/方法,以从这16个字节中生成字符串表示形式。
我选择了一个通过执行this search query产生的随机包,它具有
github.com/google/uuid.FromBytes
,它从给定的 byte slice 中产生一个UUID,并且结果值的类型实现了 String()
方法,该方法产生了您想要的内容。
关于sql - 从SQL响应读取uniqueidentifier问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62775561/