猿问

如何为接口设置任何值{}

我有以下代码:


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中有可能,还是我误会了某些东西?


http://play.golang.org/p/AjZHW54vEa


BIG阳
浏览 185回答 2
2回答

慕妹3242003

通常,仅使用反射:package mainimport (    "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

我不确定您的确切目标。如果您想断言这value是指向Point它的指针并进行更改,则可以执行以下操作:func decode(value interface{}) {    p := value.(*Point)    p.x=10    p.y=10}
随时随地看视频慕课网APP

相关分类

Go
我要回答