登录
首页 >  Golang >  Go问答

将Golang中的map转换为结构体的键值对

来源:stackoverflow

时间:2024-02-18 08:00:25 243浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《将Golang中的map转换为结构体的键值对》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

我正在尝试将映射的键值对转换为我拥有的结构的两个字段,但在执行此操作时遇到一些问题。

type A struct{
Name string
Value float64
}

type B struct {
    ListOfMetrics []*A
}

func (n *A) UnmarshalYAML(unmarshal func(interface{}) error) error {
    type origA struct {
        Metrics     map[string]float64 `protobuf:"bytes,2,opt,name=metric" json:"metrics"`
        ListOfMetrics []*A
    }
    var oN origA
    err := unmarshal(&oN)
    if err != nil {
        return err
    }
    var Dp []*A
    for metric, value := range oN.Metrics {
        fmt.Println(metric, value)
        n := A{}
        n.Metric = metric
        n.Value = value
        Dp = append(Dp, &n)

    }
    oN.ListOfMetrics = Dp
    var m *B
    m.ListOfMetrics = oN.ListOfMetrics
    return nil

基本上,我试图将 map[string]float64 的 metrics 字段获取到 metric 名称 string 和 metric 值 float64 的结构中,该结构需要存储为 metric 名称和值的列表。有人可以帮忙吗?


正确答案


您的方法 UnmarshalYAML 是为 A 定义的,但 A 只是一对。

对我来说..把它放在B中是有意义的

而且你的逻辑看起来很复杂。您使用您的内容创建一个局部变量,并且无法从外部恢复它(无需额外的努力)

我使用 json 作为基础编写了一个小示例,可以作为起点

https://go.dev/play/p/13lDeu3BkwQ

本篇关于《将Golang中的map转换为结构体的键值对》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>