gpt4 book ai didi

pointers - 更改通过引用传递的结构的值

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

我想传递一个结构作为对函数的引用,并根据它的类型(由反射识别)进行适当的转换并将值存储在结构本身中。

但是,虽然代码运行,并且值在函数内部被识别和转换,但是当控件返回到函数 main() 时,该结构没有我想存储在那里的值。

代码如下:

package main

import (
"fmt"
"reflect"
"strconv"
)

type x struct {
f1 string
f2 int
f3 bool
}

func main() {
s := x{}
getData(&s.f1, "AAA")
getData(&s.f2, "1")
getData(&s.f3, "true")
fmt.Println(s)

}
func getData(data interface{}, value string) {
if value != "" {
switch reflect.TypeOf(data).String() {
case "*int":
data, _ = strconv.Atoi(value)
case "*bool":
data, _ = strconv.ParseBool(value)
case "*string":
data = value
}
}
}

在这个例子中,我得到 { 0 false} 而期望 { AAA 1 true}

有没有 Golang GURU 可以告诉我这段代码哪里做错了?

下面是去 Playground 的链接 https://play.golang.org/p/l1_INJLOhAq

最佳答案

使用 type switch根据值的类型执行代码。在这种情况下不需要使用反射。

func getData(data interface{}, value string) {
if value != "" {
switch data := data.(type) {
case *int:
*data, _ = strconv.Atoi(value)
case *bool:
*data, _ = strconv.ParseBool(value)
case *string:
*data = value
}
}
}

有关类型开关的更多信息:Go Tour , Go Specification , Effective Go .

关于pointers - 更改通过引用传递的结构的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53019036/

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