- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我想在 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}
关于go - 通过 fmt.Sscan 设置结构值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46265834/
我有一个包含整数 值的集合。我想用 sscan 检索它的一部分. 127.0.0.1:6379[1]> smembers d 1) "1" 2) "2" 3) "3" 4) "4" 5) "
我正在使用 fmt.Sscan 将字符串转换为任何类型,这是我正在做的: package main import ( "fmt" "reflect" ) func test() int
我的两个变量都是 32 位无符号整数。不确定为什么这似乎不起作用: // Arguments: output_file how_many_mb int main(int argc, char * ar
我运行 sscan A 0,列表中的第一个键是 X。但是 X 不存在。 ttl X 给出 -2,exists X 给出 0,get X 给出 (nil),但是当我运行 sscan 时它仍然显示在列表中
我想在 map[string]string 和自定义 Go 结构之间同步状态,得出的结论是解析它的最简单方法是使用 fmt.Sscan领域。 不幸的是,直接方法不起作用(playground): va
我正在尝试将一个整数列表从一个字符串扫描到一个数组(或者一个 slice )中 package main import "fmt" func main() { var nums [5]int
我有一个很大的 redis 集合(超过 600 万个条目),我需要遍历所有条目并对每个条目进行一些其他的 redis 操作(主要是使用基于原始键的键在 redis 排序集中调用 ZCARD输入)。 遍
我想在 SSCAN 命令 完成时获取值的数量。 127.0.0.1:6379[2]> sadd Test:Info:Site 'www.naver.com' 'www.google.com' 'www
我是一名优秀的程序员,十分优秀!