返回顶部
首页 > 资讯 > 后端开发 > GO >使用泛型将结构转换为映射
  • 416
分享到

使用泛型将结构转换为映射

2024-04-04 23:04:57 416人浏览 安东尼
摘要

最近发现不少小伙伴都对golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《使用泛型将结构转换为映射》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以

最近发现不少小伙伴都对golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《使用泛型将结构转换为映射》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

我一直在尝试使用如下泛型将结构转换为地图

// You can edit this code!
// Click here and start typing.
package main

import (
    "encoding/JSON"
    "fmt"
)

type Data interface {
    int64 | float64 | string
}

type Server struct {
    Name    string
    ID      int32
    Enabled bool
}

func ConvertStructToMap[K comparable, V Data](in interface{}) map[string]V {
    var inInterface map[string]V
    inrec, _ := json.Marshal(in)
    json.Unmarshal(inrec, &inInterface)
    return inInterface

}

func main() {

    s := &Server{
        Name:    "gopher",
        ID:      123456,
        Enabled: true,
    }
    conv := ConvertStructToMap(s)
    fmt.Println(conv)

}

但是它给了我一个错误

无法推断 k (prog.go:20:25)

我刚刚开始使用 go generics,我想要的是使用泛型将结构转换为映射。任何帮助将不胜感激


正确答案


虽然 golang 有泛型,但您正在尝试创建一个泛型映射,据我所知,这是行不通的:推断的类型只能是其中一种类型:

例如输入 3 种不同类型,对 stringint64float64 的严格返回映射的推断不起作用,您必须向编译器提供额外信息。 or 是文档中的重要单词(请参阅入门指南 https://go.dev/doc/tutorial/generics)

package main

import (
    "encoding/json"
    "fmt"
)

type Data interface {
    int64 | float64 | string
}

type Server struct {
    Name    string
    ID      int32
    Enabled bool
}

func ConvertStructToMap[V Data](in interface{}) map[string]V {
    var inInterface map[string]V
    inrec, _ := json.Marshal(in)
    json.Unmarshal(inrec, &inInterface)
    return inInterface

}

func main() {

    s := &Server{
        Name:    "gopher",
        ID:      123456,
        Enabled: true,
    }
    conv := ConvertStructToMap[int64](s)
    fmt.Println(conv)
}

因此,使用泛型,除非您只想解析出 1 种类型,否则您将无法到达您想要的位置。仍然进行类型检查(评论中提到的反射)效果会更好。

替代方案:json.rawmessage

如果您定义了 map[string]json.rawmessage,您可以使用它来进一步解码信息,方法是使用反射、e.(type) 或泛型对每个元素进行单独调用来解析该类型。您可能仍然会遇到推理问题,在这种情况下,可能必须使用 map[string] 接口{},而不是 json.rawmessage

以上就是《使用泛型将结构转换为映射》的详细内容,更多关于的资料请关注编程网公众号!

您可能感兴趣的文档:

--结束END--

本文标题: 使用泛型将结构转换为映射

本文链接: https://lsjlt.com/news/596515.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用泛型将结构转换为映射
    最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《使用泛型将结构转换为映射》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以...
    99+
    2024-04-04
  • Java怎么将映射值转换为数组
    本篇内容介绍了“Java怎么将映射值转换为数组”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!将映射值转换为数组示例导入 java。...
    99+
    2023-06-02
  • 如何将映射转换为条目切片?
    对于一个Golang开发者来说,牢固扎实的基础是十分重要的,编程网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《如何将映射转换为条目切片?》,主要介绍了,希望对大家的知识积累有所帮助,快...
    99+
    2024-04-04
  • 将 json 映射为具有嵌套字典的结构
    php小编草莓将json映射为具有嵌套字典的结构是一种常见的数据处理方法。通过将json数据转换为嵌套字典,我们可以更方便地对数据进行操作和访问。嵌套字典的结构可以提供更灵活的数据组织...
    99+
    2024-02-09
    代码可读性
  • 使用 Python 将点分隔值转换为 Go 结构
    php小编柚子在本文中将介绍如何使用Python将点分隔值(如"key1.subkey1.subkey2")转换为Go语言中的结构体。这个转换过程对于从配置文件或API响应中提取和处理...
    99+
    2024-02-10
    go语言
  • 将 AWS redshiftdataapiservice.GetStatementResultOutput 转换为 JSON 或结构
    问题内容 我有一个 AWS Redshift Serverless 数据库,我正在通过 AWS Go SDK 的 redshiftdataapiservice 查询该数据库。查询和所有...
    99+
    2024-02-06
  • 使用alist将云盘映射为WebDAV
    使用alist将云盘映射为WebDAV 1. 下载2. Windows系统安装与配置2.1 alist 启动与配置2.2 添加启动与关闭的脚本2.3 开机启动 3. Linux系统安装与...
    99+
    2023-08-31
    前端 windows 服务器
  • 使用 unsafe.Pointer 直接将结构“point”转换为另一个结构是否安全?
    在Go语言中,使用`unsafe.Pointer`可以直接将一个结构体转换为另一个结构体。然而,这种转换是否安全是一个值得讨论的问题。在使用`unsafe.Pointer`进行结构体转...
    99+
    2024-02-09
    go语言 重构代码
  • yaml 将多个复杂的映射键作为一个结构体
    php小编柚子在介绍YAML时提到了一个重要的概念,那就是将多个复杂的映射键作为一个结构体。YAML是一种用于表示数据序列化的格式,具有人类可读性强的特点。在YAML中,可以使用结构体...
    99+
    2024-02-09
    键值对
  • Go - 将一个结构映射到另一个结构的惯用方式
    php小编草莓今天为大家介绍一种常用的技巧——Go。这是一种将一个结构映射到另一个结构的惯用方式。在编程中,我们经常需要将一个数据结构转换为另一个数据结构,以满足不同的需求。Go提供了...
    99+
    2024-02-11
  • 将带有字符串键/值的文件转换为 Go 映射
    编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天编程网就整理分享《将带有字符串键/值的文件转换为 ...
    99+
    2024-04-05
  • 将数据从结构 X 复制到结构 Y,但将一个字段转换为不同类型
    编程网今天将给大家带来《将数据从结构 X 复制到结构 Y,但将一个字段转换为不同类型》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都...
    99+
    2024-04-04
  • 在Go中如何将int转换为包含complex128的泛型类型?
    php小编小新将为大家介绍在Go语言中如何将int转换为包含complex128的泛型类型。在Go语言中,我们可以使用类型断言来实现这个转换。类型断言是一种检查接口值的类型的方式,它的...
    99+
    2024-02-09
    go语言
  • Go结合反射将结构体转换成Excel的过程详解
    目录Excel中的一些概念使用tealeg操作Excel安装tealeg使用tealeg新建一个表格Go结合反射将结构体转换成Excel反射获取每个Struct中的Tag通过反...
    99+
    2022-06-08
    反射 GO 结构体
  • C#中怎么将结构体转换为数组
    本篇文章给大家分享的是有关C#中怎么将结构体转换为数组,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。(1)解决C#结构体数组间的转化之定义结构体://命名空间 &nb...
    99+
    2023-06-18
  • 如何将 TypeScript 接口转换为 Go 结构体?
    php小编新一为您介绍如何将 TypeScript 接口转换为 Go 结构体。当我们在前端使用 TypeScript 开发时,经常会定义接口来描述数据结构。而在后端使用 Go 语言开发...
    99+
    2024-02-09
  • Golang结构体映射mapstructure库怎么使用
    这篇文章主要介绍“Golang结构体映射mapstructure库怎么使用”,在日常操作中,相信很多人在Golang结构体映射mapstructure库怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”G...
    99+
    2023-07-04
  • 使用JavaScript怎么将数组转为树形结构
    本篇文章给大家分享的是有关使用JavaScript怎么将数组转为树形结构,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.需求后台给了一个这样的数据让咱前端去转换为树形结构(没...
    99+
    2023-06-15
  • 将结构体字段切片转换为可变参数
    编程网今天将给大家带来《将结构体字段切片转换为可变参数》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议...
    99+
    2024-04-05
  • Go泛型实战教程之如何在结构体中使用泛型
    目录01 目标02 实现01 目标 假设我们要实现一个blog系统,在该系统中有以下两个结构体: type Category struct { ID int32 Na...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作