英文:
How can I use dynamic key for struct in Go lang?
问题
我有这个用于从 JSON 字符串中获取数据的结构体。
type msg struct {
Msg1 string `json:"msg1"`
Msg2 string `json:"msg2"`
Msg3 string `json:"msg3"`
}
我需要按照以下方式使用这个结构体。
num := // 一个小于3的随机数
data := msg.Msg + num // 类似于 msg.Msg1, msg.Msg2...
在 Go 语言中,你可以使用反射来实现这个目标。首先,你需要将 JSON 字符串解析为 msg
结构体的实例。然后,你可以使用反射来获取 msg
结构体的字段,并根据 num
的值构建字段名。
以下是一个示例代码:
import (
"encoding/json"
"fmt"
"reflect"
)
func main() {
jsonString := `{"msg1": "Hello", "msg2": "World", "msg3": "Golang"}`
var m msg
err := json.Unmarshal([]byte(jsonString), &m)
if err != nil {
fmt.Println("解析 JSON 失败:", err)
return
}
num := 1 // 这里假设 num 的值为 1
fieldName := fmt.Sprintf("Msg%d", num)
fieldValue := reflect.ValueOf(m).FieldByName(fieldName).String()
data := fieldValue + strconv.Itoa(num)
fmt.Println(data) // 输出:Hello1
}
希望这可以帮助到你!如果你有任何其他问题,请随时问我。
英文:
I have this struct for get data from Json string.
type msg struct {
Msg1 string `json:"msg1"`
Msg2 string `json:"msg2"`
Msg3 string `json:"msg3"`
}
And I need to use this struct like below.
num := // some random number under 3
data := msg.Msg + num // as msg.Msg1, msg.Msg2...
How can I do this in Go lang?
I searched a lot but couldn't find any good solutions.
答案1
得分: 1
你可以使用Go语言中的动态键吗?
很抱歉,Go语言中无法直接使用动态键。这在Go中是不可行的。
(如果需要,可以使用map来实现。)
英文:
> How can I use dynamic key for struct in Go lang?
You simply cannot. This is not doable in Go.
(Use a map if you need this.)
答案2
得分: 0
只展示给你如何使用Json和Map,可能会有帮助
package main
import (
"fmt"
"encoding/json"
)
type sample struct{
Member1 string `json:"TheMember1"`
}
func main() {
map_contains := make(map[string]string)
//Part 1 直接添加到Map
map_contains["w"]="mmmmm"
fmt.Println(map_contains)
fmt.Println(map_contains["w"])
//Part 2 Json字符串转为Map
json.Unmarshal([]byte(`{"a":"123"}`),&map_contains)
fmt.Println(map_contains)
fmt.Println(map_contains["a"])
//Part 3 结构体转为Json字符串再转为Map
s1:=sample{
Member1:"June",
}
s1json,err:=json.Marshal(s1)
if err != nil {
panic(err)
}
fmt.Println(string(s1json))
json.Unmarshal(s1json,&map_contains)
fmt.Println(map_contains)
fmt.Println(map_contains["TheMember1"])
}
希望对你有所帮助。
英文:
Just Show You How To Using Json And Map ,May be helpful
package main
import (
"fmt"
"encoding/json"
)
type sample struct{
Member1 string `json:"TheMember1"`
}
func main() {
map_contains := make(map[string]string)
//Part 1 Direct Add to Map
map_contains["w"]="mmmmm"
fmt.Println(map_contains)
fmt.Println(map_contains["w"])
//Part 2 JsonString to Map
json.Unmarshal([]byte(`{"a":"123"}`),&map_contains)
fmt.Println(map_contains)
fmt.Println(map_contains["a"])
//Part 3 Struct To JsonString To Map
s1:=sample{
Member1:"June",
}
s1json,err:=json.Marshal(s1)
if err != nil {
panic(err)
}
fmt.Println(string(s1json))
json.Unmarshal(s1json,&map_contains)
fmt.Println(map_contains)
fmt.Println(map_contains["TheMember1"])
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论