gpt4 book ai didi

go - 如何复制/克隆接口(interface)指针?

转载 作者:IT王子 更新时间:2023-10-29 01:27:51 26 4
gpt4 key购买 nike

我正在尝试制作一个作为接口(interface){}接收的指针的副本。知道怎么做吗?我试过 Reflect.Value.Interface() 但它返回指针/地址本身而不是返回它的值(尊重)。我还想知道是否存在显着的性能损失,因为我计划进行这种复制与简单的指针遵循。

package main

import "fmt"
import "reflect"

type str struct {
field string
}

func main() {
s := &str{field: "astr"}
a := interface{}(s)
v := reflect.ValueOf(a)
s.field = "changed field"
b := v.Interface()
fmt.Println(a, b)
}

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

最佳答案

你需要reflect.Indirect ,并在更改 s.field 之前设置 b

这是一些工作代码:

https://play.golang.org/p/PShhvwXjdG

package main

import "fmt"
import "reflect"

type str struct {
field string
}

func main() {

s := &str{field: "astr"}
a := interface{}(s)

v := reflect.Indirect(reflect.ValueOf(a))
b := v.Interface()

s.field = "changed field"

fmt.Println(a, b)
}

关于go - 如何复制/克隆接口(interface)指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33029228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com