我有以下代码:
package main
import (
"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中是否可能,或者我误解了什么?
答案 0 :(得分:5)
通常只有using reflection:
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)
}
答案 1 :(得分:1)
我不确定你的确切目标。
如果您希望assert value
是Point
的指针并进行更改,则可以执行此操作:
func decode(value interface{}) {
p := value.(*Point)
p.x=10
p.y=10
}