返回顶部
首页 > 资讯 > 精选 >Go - 将一个结构映射到另一个结构的惯用方式
  • 420
分享到

Go - 将一个结构映射到另一个结构的惯用方式

2024-02-11 20:02:29 420人浏览 泡泡鱼
摘要

PHP小编草莓今天为大家介绍一种常用的技巧——Go。这是一种将一个结构映射到另一个结构的惯用方式。在编程中,我们经常需要将一个数据结构转换为另一个数据结构,以满足不同的需求。Go提供了

PHP小编草莓今天为大家介绍一种常用的技巧——Go。这是一种将一个结构映射到另一个结构的惯用方式。在编程中,我们经常需要将一个数据结构转换为另一个数据结构,以满足不同的需求。Go提供了一种简洁而灵活的方法来实现这个目标。无论是在处理数据库查询结果、api响应还是其他数据转换场景中,Go都能帮助我们轻松完成结构映射的工作。接下来,让我们一起来了解一下Go的具体用法吧!

问题内容

我正在使用第三方 go 语言库来查询用户的 ldap 数据库。该库返回 resultuser 的 searchresult 切片,我需要将其映射到我自己的 user 结构。这两个结构具有不同的字段名称,我只需要 resultuser 中的特定字段。 go 中是否有更惯用的方法将一个结构转换为另一个结构。

我在下面创建了一个演示(go playground 上也有链接)。预先感谢您给这位 go 新手的任何建议!

package main

import "fmt"

type (
    User struct {
        id        int32
        firstName string
    }

    ResultUser struct {
        uid   int32
        fname string
    }
    SearchResults []ResultUser
)

func main() {
    results := getSearchResults()
    users := mapResultsToUsers(results) // <-- This is the problem
    fmt.Println("User struct:", users[0].id, users[0].firstName)
    fmt.Println("User struct:", users[1].id, users[1].firstName)
}

// Simulates a query to a data with a library
func getSearchResults() (results SearchResults) {
    return append(results, ResultUser{1, "John"}, ResultUser{2, "Jane"})
}

// Seems like a code smell to have to do this
// Is there a more idiomatic way to do this?
func mapResultsToUsers(results SearchResults) (users []User) {
    for _, result := range results {
        users = append(users, User{result.uid, result.fname})
    }
    return users
}

我见过结构体字段标签,但不确定是否有更好的方法。

解决方法

我认为您所拥有的几乎是最好的解决方案,尽管我会将映射移至专用函数中,例如:

func fromresultuser(r *resultuser) *user {
  return &user{
    id: r.uid,
    firstname: r.fname,
  }
}

然后 mapresultstousers 变为:

func mapresultstousers(results searchresults) (users []*user) {
  for _, result := range results {
      users = append(users, fromresultuser(result))
  }
  return users
}

我见过结构体字段标签,但不确定是否有更好的方法。

您可以组合一些内容,以便可以注释您的 user 结构,如下所示:

User struct {
    id        int32     `mappedFrom:"uid"`
    firstName string    `mappedFrom:"fname"`
}

但是实现该方法所需的方法比此处介绍的 fromresultuser 复杂得多,并且需要熟悉 reflect 包。我认为,正如我的一位同事喜欢说的那样,“果汁不值得榨”。

以上就是Go - 将一个结构映射到另一个结构的惯用方式的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: Go - 将一个结构映射到另一个结构的惯用方式

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

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

猜你喜欢
  • Go - 将一个结构映射到另一个结构的惯用方式
    php小编草莓今天为大家介绍一种常用的技巧——Go。这是一种将一个结构映射到另一个结构的惯用方式。在编程中,我们经常需要将一个数据结构转换为另一个数据结构,以满足不同的需求。Go提供了...
    99+
    2024-02-11
  • yaml 将多个复杂的映射键作为一个结构体
    php小编柚子在介绍YAML时提到了一个重要的概念,那就是将多个复杂的映射键作为一个结构体。YAML是一种用于表示数据序列化的格式,具有人类可读性强的特点。在YAML中,可以使用结构体...
    99+
    2024-02-09
    键值对
  • 将一个golang的map转换成另一种map的结构
    php小编苹果将为您介绍如何将一个Golang的map转换成另一种map的结构。在开发过程中,有时我们需要对原有的map进行一些转换操作,以满足特定的需求。无论是数据类型的转换还是结构...
    99+
    2024-02-14
  • 使用 unsafe.Pointer 直接将结构“point”转换为另一个结构是否安全?
    在Go语言中,使用`unsafe.Pointer`可以直接将一个结构体转换为另一个结构体。然而,这种转换是否安全是一个值得讨论的问题。在使用`unsafe.Pointer`进行结构体转...
    99+
    2024-02-09
    go语言 重构代码
  • 如何从 go 中的另一个包访问结构变量?
    各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题是《如何从 go 中的另一个包访问结构变量?》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很...
    99+
    2024-04-05
  • 如何在另一个结构体中使用结构体字段而不将其引用为键
    在PHP的开发中,经常会遇到在一个结构体中使用另一个结构体字段的情况。然而,直接将其引用为键可能会造成代码的混乱和不易维护。那么如何在另一个结构体中使用结构体字段呢?php小编百草为大...
    99+
    2024-02-10
  • mysql将数据库的所有表结构和数据复制到另一个库
    要将一个MySQL数据库的所有表结构和数据复制到另一个数据库,可以使用以下步骤: 在目标数据库中创建一个空的数据库。例如,假设要将名为olddb的数据库复制到名为newdb的新数据库中,可以使用以下语...
    99+
    2023-09-02
    数据库 mysql sql
  • 如何将两个键映射到 JSON 结构中的单个成员。 (与元帅/元帅)
    今天编程网给大家带来了《如何将两个键映射到 JSON 结构中的单个成员。 (与元帅/元帅)》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看...
    99+
    2024-04-04
  • 如何将映射添加到用于反序列化 json 配置的同一结构中?
    哈喽!大家好,很高兴又见面了,我是编程网的一名作者,今天由我给大家带来一篇《如何将映射添加到用于反序列化 json 配置的同一结构中?》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关...
    99+
    2024-04-05
  • 将数据从结构 X 复制到结构 Y,但将一个字段转换为不同类型
    编程网今天将给大家带来《将数据从结构 X 复制到结构 Y,但将一个字段转换为不同类型》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都...
    99+
    2024-04-04
  • mysql 将数据库中的所有表结构和数据 导入到另一个库(亲测有效)
    一、问题描述 在本地开发一个功能,需要结合具体数据测试代码是否正确,但服务器上的数据不可随便修改。此时则需要将服务器上某个数据库的表批量导入到本地、而后进行测试。将数据库db1中的所有表及数据(如table1、table2),批量导入到另一...
    99+
    2023-12-22
    数据库 mysql oracle
  • 用结构化思维策划一个会议
    引言:一个复杂问题进行拆分,最后会形成一个数量巨大的细分问题群。如果没有严格的按照“逐层不漏不重”原则进行,细分出的问题将很难形成合力来完整有效地支撑解决原问题。本文以策划一个会议为例,来了解结构化思维的应...
    99+
    2024-04-02
  • GO:导入一个结构并在 json 中重命名它
    php小编鱼仔为您介绍一种在JSON中导入一个结构并重命名它的方法,即使用"GO"关键字。在JSON中,我们经常需要使用已定义的结构,但有时候我们需要将其重命名以适应特定的需求。使用"...
    99+
    2024-02-09
  • SQL将一个表中的数据插入到另一个表中的方法
    创建测试表MyStudentInfo CREATE table MyStudentInfo ( Id int not null primary key, Name varch...
    99+
    2024-04-02
  • 使用Java将一个List运用递归转成树形结构案例
    在开发中,我们会遇到将不同组织架构合并成tree这种树状结构,那么如果做呢? 实际上,我们也可以理解为如何将拥有父子关系的list转成树形结构,而这其中主要的方法就是递归! 1、实体...
    99+
    2024-04-02
  • 使用python怎么实现一个区块链结构
    这期内容当中小编将会给大家带来有关使用python怎么实现一个区块链结构,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)...
    99+
    2023-06-14
  • Springboot实现给前端返回一个tree结构方法
    1:首先我们看一下数据库的表: 这里的pid就是代表他的父节点id,如果没有父节点,那么pid就是0,上面的表就可以看作是一个tree结构,那么我们怎样去将这个tree结构返回给前...
    99+
    2024-04-02
  • Go语言数据结构怎么实现抄一个list示例
    这篇文章主要介绍了Go语言数据结构怎么实现抄一个list示例的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言数据结构怎么实现抄一个list示例文章都会有所收获,下面我们一起来看看吧。list是个啥在开始做...
    99+
    2023-07-06
  • java中将一个实体类复制到另一个实体类的三种方法
    这两天在做发票识别时,遇到一个问题,有一张发票表(假设为invoice_OCR_success)和一张我根据发票表新建的表(假设为invoice_OCR_fail),两张表有些字段名是相同的,有时需要把其中一张表的实例在另一张表里保存一份,...
    99+
    2023-08-16
    java spring 开发语言 json
  • PHP 函数内部结构:一个全面的视角
    php函数是一种高度可重用的代码块,用于执行特定任务。它包含函数声明、函数体、参数传递、变量范围和返回值。函数接受的参数通过传值调用传递,并在函数内部声明的变量只能在这个函数中访问。通过...
    99+
    2024-04-10
    函数 php
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作