go - 我应该如何在golang中传递参数?
问题描述
我有以下全部代码:
我希望 golang 中的字符串转换映射,并使用 golang 反射。
以下代码已从我的项目中简化。
package main
import (
"encoding/json"
"fmt"
"reflect"
)
func main() {
jsonStr := `{"name": "thinkerou", "age": 31, "balance": 3.14}`
var a map[string]interface{}
var value reflect.Value = reflect.ValueOf(&a)
// call function and pass param
f(jsonStr, value)
// print result
fmt.Println(value.Kind(), value.Interface())
}
func f(v string, value reflect.Value) {
personMap := make(map[string]interface{})
err := json.Unmarshal([]byte(v), &personMap)
if err != nil {
panic(err)
}
value = reflect.Indirect(value)
value = reflect.MakeMap(value.Type())
for k, v := range personMap {
// set key/value
value.SetMapIndex(reflect.ValueOf(k), reflect.ValueOf(v))
}
// print result
fmt.Println(value.Kind(), value.Interface())
}
并运行它,将得到结果:
map map[age:31 balance:3.14 name:thinkerou]
ptr &map[]
我希望以下结果:
map map[age:31 balance:3.14 name:thinkerou]
map map[age:31 balance:3.14 name:thinkerou]
我应该如何传递reflect.Value
参数?谢谢!
解决方案
您应该能够使用type assertion从界面获取地图:
a := i.(map[string]interface{})
请参阅“在 Golang 中将 Value 类型转换为 Map? ”
我在这里修改了你的代码。
请注意,我不会尝试改变f(value)
参数,而是返回它。
func f(v string, value reflect.Value) reflect.Value {
...
return value
}
所以代码变成了:
value = f(jsonStr, value)
fmt.Println(value.Kind(), value.Interface().(map[string]interface{}))
推荐阅读
- php - Magento 2 rest api 订单状态总是更新完成
- c# - 将数据库连接到列表框
- javascript - WEBDRIVERIO / CUCUMBER:函数超时,确保 Promise 在 10000 毫秒内解决
- javascript - TypeError:无法读取未定义的属性“中心”(Three.js + React.js)
- optaplanner - 如果我在 optaplanner 中使用多线程,则抛出异常
- sql - 删除重复但为每个保留一行
- git - gitlab 错误:尝试推送更改时未知作者
- email - Sendgrid: use template versions to support multiple languages
- java - 在多线程环境中使用模拟对象
- python - Python Tkinter 将按钮大小调整为窗口大小