我有以下代码:package mainimport ( "fmt")type Point struct { x,y int}func decode(value interface{}) { fmt.Println(value) // -> &{0,0} // This is simplified example, instead of value of Point type, there // can be value of any type. value = &Point{10,10}}func main() { var p = new(Point) decode(p) fmt.Printf("x=%d, y=%d", p.x, p.y) // -> x=0, y=0, expected x=10, y=10}我想将任何类型的值设置为传递给decode函数的值。在Go中有可能,还是我误会了某些东西?http://play.golang.org/p/AjZHW54vEa
2 回答
慕妹3242003
TA贡献1824条经验 获得超6个赞
通常,仅使用反射:
package main
import (
"fmt"
"reflect"
)
type Point struct {
x, y int
}
func decode(value interface{}) {
v := reflect.ValueOf(value)
for v.Kind() == reflect.Ptr {
v = v.Elem()
}
n := reflect.ValueOf(Point{10, 10})
v.Set(n)
}
func main() {
var p = new(Point)
decode(p)
fmt.Printf("x=%d, y=%d", p.x, p.y)
}
开心每一天1111
TA贡献1836条经验 获得超13个赞
我不确定您的确切目标。
如果您想断言这value是指向Point它的指针并进行更改,则可以执行以下操作:
func decode(value interface{}) {
p := value.(*Point)
p.x=10
p.y=10
}
- 2 回答
- 0 关注
- 184 浏览
添加回答
举报
0/150
提交
取消