gpt4 book ai didi

go - 通过 fmt.Sscan 设置结构值

转载 作者:数据小太阳 更新时间:2023-10-29 03:04:06 25 4
gpt4 key购买 nike

我想在 map[string]string 和自定义 Go 结构之间同步状态,得出的结论是解析它的最简单方法是使用 fmt.Sscan领域。

不幸的是,直接方法不起作用(playground):

var S struct{ I int }

f := reflect.Indirect(reflect.ValueOf(&S)).Field(0)
fmt.Sscan("10", f.Interface())
fmt.Println(S) // {0}

然而,引入一个中间值并使用 Set() 解决了这个问题:

nv := reflect.New(f.Type())
fmt.Sscan("10", nv.Interface())
f.Set(reflect.Indirect(nv))
fmt.Println(S) // {10}

我想知道为什么第一种方法不起作用。 Interface() 不是返回一种对可用于更改其值的字段的引用吗?

最佳答案

Interface() 方法返回值,而不是对值的引用。取字段地址(调用Addr())直接扫描到字段:

var S struct{ I int }
f := reflect.Indirect(reflect.ValueOf(&S)).Field(0)
fmt.Sscan("10", f.Addr().Interface())
fmt.Println(S) // {0}

https://play.golang.org/p/6_4DjiFZB2

关于go - 通过 fmt.Sscan 设置结构值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46265834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com