为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
BIG阳 2021-05-02 13:49:52
我有以下代码: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)

}


查看完整回答
反对 回复 2021-05-17
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

我不确定您的确切目标。


如果您想断言这value是指向Point它的指针并进行更改,则可以执行以下操作:


func decode(value interface{}) {

    p := value.(*Point)

    p.x=10

    p.y=10

}


查看完整回答
反对 回复 2021-05-17
  • 2 回答
  • 0 关注
  • 184 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信