我有以前序列化爲fmt.Sprintf("%+v", d)
,d
是一個struct
實例的數據。有沒有辦法掃描它?我天真的嘗試下面使用fmt.Sscanf()
失敗(Go Playground)。fmt.Sscanf對於結構
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}
有掃描結構後面的方法嗎?
我認爲實現掃描器(甚至是你自己的)比較困難,例如當struct有一個'string'成員時,因爲'(S)printf'不會轉義該值。作爲一個例子,'struct {s string} {「f:3」}將被打印爲'{s:f:3}',這與'struct {s字符串的打印版本f int} {「」,3}'(爲了清楚起見,逗號被添加到'struct'中)。 – putu