结构的fmt.Sscanf

时间:2017-06-07 07:59:06

标签: go scanf

我的数据以前被序列化为fmt.Sprintf("%+v", d)dstruct个实例。有没有办法扫描回来?我在下面使用fmt.Sscanf()的天真尝试失败了(Go Playground)。

package main

import (
    "fmt"
)

type data struct {
    f int
}

func main() {
    x := data{1}
    s := fmt.Sprintf("%+v", x)
    var y data
    n, err := fmt.Sscanf(s, "%+v", &y)
    fmt.Printf("s=%s, n=%d, err=%+v, y=%+v\n", s, n, err, y)
}

输出结果为:

s={f:1}, n=0, err=can't scan type: *main.data, y={f:0}

有没有办法扫描结构?

1 个答案:

答案 0 :(得分:1)

不幸的是fmt包不会产生严格的可解析输出。谢天谢地,还有其他用于封送数据的软件包,这些软件包应该同样易于使用。

我推荐json用于简单的事情:

s, err := json.Marshal(data)
// Check err
err = json.Unmarshal(s, data)

json将生成与printf有些相似的输出,但符合确保可以解析的标准。如果您的目标是解析仅以Printf'形式存在的数据,那么您可能会运气不佳。