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

反射:设置一个指针的字段

反射:设置一个指针的字段

Go
茅侃侃 2021-10-25 17:18:10
我正在尝试做这样的事情:使用名为 的标签定义结构env:type Env struct {     Port string `env:"PORT"`}调用一些函数来获取环境变量名称os.Getenv并将其设置在结构中。现在,我有这个:package mainimport (    "fmt"    "os"    "reflect")func ParseEnv(t interface{}, v interface{}) {    it := reflect.TypeOf(t)    for i := 0; i < it.NumField(); i++ {        field := it.Field(i)        value := os.Getenv(field.Tag.Get("env"))        if value == "" {            continue        }        reflect.ValueOf(v).Elem().FieldByName(field.Name).SetString(value)    }}type Env struct {    Port        string `env:"PORT"`    DatabaseURL string `env:"DATABASE_URL"`}func main() {    os.Setenv("PORT", "8080")    os.Setenv("DATABASE_URL", "postgres://user:pass@host:5432/my-db")    env := Env{}    ParseEnv(env, &env)    fmt.Println(env)}http://play.golang.org/p/b8uPPVo4aV但是,正如您所看到的,我必须将引用和指针都传递给我的函数。虽然这有效,但它非常丑陋(至少我认为是)。如果我尝试仅传递指针,则无法获得正确的类型(因为它将是*interface{}),并且如果我仅传递引用,则无法使用设置值reflect(即使可以,也不会工作)。有没有一种理智的方法来做到这一点?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

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