私は以前に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}
は、構造体の背面をスキャンする方法はありますか?
'(S)printf'が値をエスケープしないので、構造体が' string'メンバを持っているときなど、スキャナを実装するのは非常に難しいと思います。例として 'struct {s string} {" f:3 "}'は '{s:f:3}'として出力されます。これは 'struct {s string、f int} {""、3} '(分かりやすくするために' struct'にカンマが追加されています)。 – putu