如何使用反射在 Golang 中将数组值设置为字段?

huangapple go评论91阅读模式
英文:

How to set array value to a field in golang using reflect?

问题

我有一个包含以下字段的结构体:

type Config struct {
    Address []string
    Name    string
}

我正在从一个以JSON格式存储的文件中读取这个Config的值:

{
   "Address": ["xx.xx.xx.xx","xx.xx.xx.xx"],
   "Name": "Name"
}

我使用反射来识别类型并将其值设置为Config。我能够使用func (v Value) SetString(x string)这个反射中的内置方法来设置Name字段的值。是否有一种方法可以直接将[]string的值设置到一个字段中?请帮忙解答。

英文:

I have a Struct with following fields

type Config struct {
		Address[]string
        Name string
}

I am reading the values for this Config from a file in JSON format

{
   "Address": ["xx.xx.xx.xx","xx.xx.xx.xx"],
   "Name":"Name"
}

I have used Reflect to identify the type and set its value to Config.I am able to set the value of Name field using
func (v Value) SetString(x string) which is an inbuilt method in reflect. Is there a way to set []string values directly to a field? Please help.

答案1

得分: 3

你可以使用json包来实现这个功能(它在内部使用反射):

package main

import (
	"encoding/json"
	"fmt"
)

type Config struct {
	Address []string
	Name    string
}

var someJson = []byte(`{
   "Address": ["xx.xx.xx.xx","xx.xx.xx.xx"],
   "Name":"Name"
}`)

func main() {
	var config Config
	err := json.Unmarshal(someJson, &config)
	if err != nil {
		fmt.Println("error: ", err)
	}
	fmt.Printf("%v", config)
}

这段代码使用了json包来解析JSON数据,并将其映射到Config结构体中。然后,通过fmt.Printf打印出解析后的config对象。

英文:

You can use the json package for that (it uses reflect internally):

package main

import (
	"encoding/json"
	"fmt"
)

type Config struct {
	Address []string
	Name    string
}

var someJson = []byte(`{
   "Address": ["xx.xx.xx.xx","xx.xx.xx.xx"],
   "Name":"Name"
}`)

func main() {
	var config Config
	err := json.Unmarshal(someJson, &config)
	if err != nil {
		fmt.Println("error: ", err)
	}
	fmt.Printf("%v", config)
}

huangapple
  • 本文由 发表于 2016年2月22日 19:49:53
  • 转载请务必保留本文链接:https://go.coder-hub.com/35552868.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定