返回顶部
首页 > 资讯 > 后端开发 > GO >使用 Reflect 比较结构体字段
  • 580
分享到

使用 Reflect 比较结构体字段

2024-04-04 23:04:09 580人浏览 薄情痞子
摘要

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题是《使用 Reflect 比较结构体字段》,很明显是关于golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题是《使用 Reflect 比较结构体字段》,很明显是关于golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

我正在尝试对 put api 中使用的结构进行更新。我需要查明新结构中的字段是否与旧结构中的相同字段具有不同的值。我以前从未使用过reflect,所以我有点困惑。这是我的代码,我希望它只打印不同的字段,但它打印了每个字段。

package main

import (
    "fmt"
    "reflect"
)

type Permission struct {
    User       int    `JSON:"user" db:"user"`
    ObjectId   int    `json:"object_id" db:"object_id"`
    ObjectType string `json:"object_type" db:"object_type"`
    Permission string `json:"codename" db:"codename"`
}

func main() {
    old := Permission{1, 1, "site", "view_site"}
    new := Permission{1, 2, "site", "edit_site"}
    v1 := reflect.ValueOf(old)
    v2 := reflect.ValueOf(new)
    t := reflect.TypeOf(old)
    for i := 0; i < v1.NumField(); i++ {
        if v2.Field(i) != v1.Field(i) {
            fmt.Printf("%v ", t.Field(i).Name)
            fmt.Printf("old: %v ", v1.Field(i))
            fmt.Printf("new: %v ", v2.Field(i))
            fmt.Println("")
        }
    }
}

我猜其原因是每个 value 都是不同的结构,因此它们不相等,但我似乎无法弄清楚如何实际执行我需要执行的操作。


解决方案


请记住反射值与底层结构字段值之间的差异。这一行:

v2.Field(i) != v1.Field(i)

将一个结构体的反射域与另一个结构体的反射域进行比较。 不是字段,而是字段本身的反映。要获取这些值,您需要使用 field(i).interface(),这会将字段的值作为 interface{} 返回。

您可以在此处查看工作示例:https://play.Golang.org/p/0tAkjGTpCeu

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《使用 Reflect 比较结构体字段》文章吧,也可关注编程网公众号了解相关技术文章。

您可能感兴趣的文档:

--结束END--

本文标题: 使用 Reflect 比较结构体字段

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

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

猜你喜欢
  • 使用 Reflect 比较结构体字段
    各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题是《使用 Reflect 比较结构体字段》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错...
    99+
    2024-04-04
  • Python数字比较与类结构
    目录前言问题简述一个想法总结前言 版本: windows 10.0python 3.8 问题简述 近期看到这么一个问题,有把值分别赋值给不同的变量,想在比较大小后得到变量的名称。 a...
    99+
    2024-04-02
  • oracle两张结构完全相同表,判断比较字段,如果字段不同,
    需求:oracle两张结构完全相同表,判断比较字段,如果字段不同,则将数据放入第三张表参考博客:https://bbs.csdn.net/topics/350192411                  ...
    99+
    2024-04-02
  • golang 如何用反射reflect操作结构体
    背景 需要遍历结构体的所有field 对于exported的field, 动态set这个field的value 对于unexported的field, 通过强行取址的方法来获取该值(...
    99+
    2024-04-02
  • golang怎么用反射reflect操作结构体
    这篇文章给大家分享的是有关golang怎么用反射reflect操作结构体的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。golang的优点golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可以...
    99+
    2023-06-14
  • 使用反射获取结构体字段的指针值
    珍惜时间,勤奋学习!今天给大家带来《使用反射获取结构体字段的指针值》,正文内容主要涉及到等等,如果你正在学习Golang,或者是对Golang有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望...
    99+
    2024-04-04
  • 如何在另一个结构体中使用结构体字段而不将其引用为键
    在PHP的开发中,经常会遇到在一个结构体中使用另一个结构体字段的情况。然而,直接将其引用为键可能会造成代码的混乱和不易维护。那么如何在另一个结构体中使用结构体字段呢?php小编百草为大...
    99+
    2024-02-10
  • 如何使用 r3labs/diff 比较整个结构
    哈喽!今天心血来潮给大家带来了《如何使用 r3labs/diff 比较整个结构》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千...
    99+
    2024-04-05
  • 使用Golang反射实现结构体字段遍历与修改
    go 反射可以用于遍历和修改结构体字段。字段遍历:使用 reflect.typeof 和 reflect.field 遍历结构体字段。字段修改:通过 elem 和 set 来访问和修改结...
    99+
    2024-04-03
    java 关键词: php golang
  • CSS如何设置字体都是使用比较安全的字体
    这篇文章主要为大家展示了“CSS如何设置字体都是使用比较安全的字体”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“CSS如何设置字体都是使用比较安全的字体”这篇文...
    99+
    2024-04-02
  • golang 实现两个结构体复制字段
    实际工作中可能会有这样的场景: 两个结构体(可能类型一样), 字段名和类型都一样, 想复制一个结构体的全部或者其中某几个字段的值到另一个(即merge操作), 自然想到可以用反射实现...
    99+
    2024-04-02
  • 为什么结构体字段显示为空?
    php小编新一为你解答为什么结构体字段显示为空。在编程中,结构体是一种自定义的数据类型,用于存储不同类型的数据。当结构体字段显示为空时,可能是因为未正确初始化结构体或者未给字段赋值。另...
    99+
    2024-02-09
    作用域
  • 如何访问结构体的指针切片字段内的嵌入结构体
    php小编草莓为您介绍如何访问结构体的指针切片字段内的嵌入结构体。在Go语言中,我们可以使用指针切片来存储结构体数据,并且在结构体中嵌入其他结构体作为字段。然而,访问嵌入结构体字段需要...
    99+
    2024-02-09
    go语言
  • 计算结构体字段中的切片长度
    php小编鱼仔将为您介绍如何计算结构体字段中的切片长度。在编程中,结构体是一种用于组织相关数据的数据结构。在某些情况下,我们可能需要计算结构体字段中的切片长度,以便在程序中进行相关操作...
    99+
    2024-02-09
  • 使用其他“部分”结构中的值覆盖结构字段
    php小编西瓜在这里为大家介绍一个有关使用其他“部分”结构中的值覆盖结构字段的方法。在编程中,我们经常需要根据不同的情况来更新结构字段的值。这种情况下,我们可以使用其他结构中的值来覆盖...
    99+
    2024-02-12
  • 如何寻找结构体中未设置值的字段
    今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《如何寻找结构体中未设置值的字段》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看...
    99+
    2024-04-04
  • 将结构体字段切片转换为可变参数
    编程网今天将给大家带来《将结构体字段切片转换为可变参数》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议...
    99+
    2024-04-05
  • 怎么在golang中实现两个结构体复制字段
    怎么在golang中实现两个结构体复制字段?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。golang的优点golang是一种编译语言,可以将代码编译为机器代码,...
    99+
    2023-06-14
  • go结构体动态添加字段的方法是什么
    在Go语言中,结构体是一种固定字段的数据类型,无法动态添加字段。这是因为Go语言是静态类型语言,所有的变量和字段必须在编译时确定。如...
    99+
    2023-10-10
    go
  • golang中如何按照结构体的某个字段排序
    本文小编为大家详细介绍“golang中如何按照结构体的某个字段排序”,内容详细,步骤清晰,细节处理妥当,希望这篇“golang中如何按照结构体的某个字段排序”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。概述gol...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作