登录
首页 >  Golang >  Go问答

在 Golang 中将结构转换为映射的函数

来源:Golang技术栈

时间:2023-03-21 15:41:35 259浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《在 Golang 中将结构转换为映射的函数》,这篇文章主要会讲到golang等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

问题内容

我想将结构转换为 Golang 中的映射。如果我可以在创建的地图中使用 JSON 标签作为键(否则默认为字段名称),那也很好。

编辑 2020 年 12 月 14 日

由于structs repo 已存档,因此您可以改用mapstructure。

编辑 TL;DR 版本,2015 年 6 月 15 日

如果您想要将结构转换为映射的快速解决方案,请参阅已[接受的答案](https://stackoverflow.com/questions/23589564/function- for-converting-a-struct-to-map-in-golang#25117810),对其进行投票并使用该包。

快乐编码!:)


原帖

到目前为止我有这个功能,我正在使用反射包,但我不太了解如何使用该包,请多多包涵。

func ConvertToMap(model interface{}) bson.M {
    ret := bson.M{}

    modelReflect := reflect.ValueOf(model)

    if modelReflect.Kind() == reflect.Ptr {
        modelReflect = modelReflect.Elem()
    }

    modelRefType := modelReflect.Type()
    fieldsCount := modelReflect.NumField()

    var fieldData interface{}

    for i := 0; i 

我还查看了 JSON 包源代码,因为它应该包含我需要的实现(或其中的一部分)但不太了解。

正确答案

我也需要这样的东西。我正在使用将结构转换为地图的内部包。struct我决定用其他基于高级功能的开源它。看一看:

https://github.com/fatih/structs

它支持:

  • 将结构转换为地图
  • 将结构的字段提取到[]string
  • 将结构的值提取到[]values
  • 检查结构是否已初始化
  • 检查传递的接口是结构还是指向结构的指针

您可以在这里看到一些示例:http: //godoc.org/github.com/fatih/structs#pkg- examples 例如将结构转换为地图很简单:

type Server struct {
    Name    string
    ID      int32
    Enabled bool
}

s := &Server{
    Name:    "gopher",
    ID:      123456,
    Enabled: true,
}

// => {"Name":"gopher", "ID":123456, "Enabled":true}
m := structs.Map(s)

structs包支持匿名(嵌入)字段和嵌套结构。该软件包提供通过字段标签过滤某些字段。

今天带大家了解了golang的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

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