首页 > 其他分享 >goframe gconv.structs示例代码

goframe gconv.structs示例代码

时间:2024-10-28 23:19:21浏览次数:10  
标签:Map struct err 示例 gconv goframe user string

以下是一些使用  gconv.structs  的示例代码,展示了如何在 GoFrame 框架中进行结构体转换:
示例1:基本使用
package main

import (
    "fmt"
    "github.com/gogf/gf/frame/g"
    "github.com/gogf/gf/util/gconv"
)

type User struct {
    Uid      int
    Name     string
    SiteUrl  string
    NickName string
    Pass1    string `gconv:"password1"`
    Pass2    string `gconv:"password2"`
}

func main() {
    // 使用默认映射规则绑定属性值到对象
    user := new(User)
    params1 := g.Map{
        "uid":       1,
        "Name":      "john",
        "siteurl":   "https://goframe.org",
        "nick_name": "johng",
        "PASS1":     "123",
        "PASS2":     "456",
    }
    if err := gconv.Struct(params1, user); err == nil {
        g.Dump(user)
    }

    // 使用struct tag映射绑定属性值到对象
    user = new(User)
    params2 := g.Map{
        "uid":       2,
        "name":      "smith",
        "site-url":  "https://goframe.org",
        "nick name": "johng",
        "password1": "111",
        "password2": "222",
    }
    if err := gconv.Struct(params2, user); err == nil {
        g.Dump(user)
    }
}
示例2:复杂类型转换
1. struct属性为struct或*struct
package main

import (
    "fmt"
    "github.com/gogf/gf/util/gconv"
    "github.com/gogf/gf/frame/g"
)

type Score struct {
    Name   string
    Result int
}

type User1 struct {
    Scores Score
}

type User2 struct {
    Scores *Score
}

func main() {
    user1 := new(User1)
    user2 := new(User2)
    scores := g.Map{
        "Scores": g.Map{
            "Name":   "john",
            "Result": 100,
        },
    }
    if err := gconv.Struct(scores, user1); err != nil {
        fmt.Println(err)
    } else {
        g.Dump(user1)
    }
    if err := gconv.Struct(scores, user2); err != nil {
        fmt.Println(err)
    } else {
        g.Dump(user2)
    }
}
2. struct属性为slice,数值为slice
package main

import (
    "fmt"
    "github.com/gogf/gf/util/gconv"
    "github.com/gogf/gf/frame/g"
)

type Score struct {
    Name   string
    Result int
}

type User struct {
    Scores []Score
}

func main() {
    user := new(User)
    scores := g.Map{
        "Scores": g.Slice{
            g.Map{
                "Name":   "john",
                "Result": 100,
            },
            g.Map{
                "Name":   "smith",
                "Result": 60,
            },
        },
    }
    // 嵌套struct转换,属性为slice类型,数值为slice map类型
    if err := gconv.Struct(scores, user); err != nil {
        fmt.Println(err)
    } else {
        g.Dump(user)
    }
}
这些示例展示了如何使用  gconv.structs  进行基本的和复杂的结构体转换,包括使用默认映射规则、struct tag映射以及处理嵌套结构体和切片。
 

标签:Map,struct,err,示例,gconv,goframe,user,string
From: https://blog.csdn.net/leijmdas/article/details/143316225

相关文章

  • 数学建模例题2.38 数据写入文件示例
    2.38.1`importpandasaspdimportnumpyasnpdates=pd.date_range(start='20191101',end='20191124',freq='D')a1=pd.DataFrame(np.random.randn(24,4),index=dates,columns=list('ABCD'))a2=pd.DataFrame(np.random.rand......
  • Rust 跨平台应用开发第一章:快速上手 Rust——实用示例
    1.3实用示例在这一节中,我们将通过一系列实用的示例来帮助您更好地理解Rust的特性,并展示如何在实际项目中使用这些特性。示例将涵盖文件操作、网络请求、并发编程、命令行工具以及使用Cargo管理依赖等多个方面。1.3.1文件操作示例Rust提供了强大的标准库来进行文件操......
  • 低功耗4G模组:RSA算法示例
    ​今天我们学习合宙低功耗4G模组Air780EP_LuatOS_rsa示例,文末【阅读原文】获取最新资料。一、简介RSA算法的安全性基于:将两个大质数相乘很容易,但是想要将其乘积分解成原始的质数因子却非常困难。关联文档和使用工具:LuatOS固件获取rsa-demoLuatools下载调试工具......
  • FreeRTOS同步互斥与通信(有缺陷的同步示例,有缺陷的互斥示例)
    同步互斥1.同步同步指的是协调多个线程或进程的执行顺序,以确保某些操作按预期的顺序进行。同步主要用于解决依赖关系的问题,确保线程之间的协调。目的:保证操作的顺序,确保某些条件成立前不进行后续操作。实现方式:信号量:控制访问共享资源的数量,可以限制同时访问的线......
  • 04. 微服务 - 示例搭建 - LoadBalancer(一)
    前言基于Eureka示例搭建时的代码hosts增加域名dingsu-300两种设备服务提供者(软交换-sip、300)各两个节点,用于测试负载路由情况负载均衡概念依据各项指标(可使用硬件资源、节点数、请求速率、业务场景等)进行权重考量,将负载(访问请求、工作任务等)分摊到多个服务节点上,从而......
  • C#线程详解及应用示例
     简介在编写应用程序实现业务功能过程中,为解决吞吐量和响应效率的问题,我们会用到多线程、异步编程两项重要的技术。通过它们来提高应用程序响应和高效。应用程序每次运行都会启动一个进程(进程是一种正在执行的程序),而进程中可以包含一个或多个线程,由应用程序入口直接或间接执......
  • sed 命令详解及示例
    sed是一种流编辑器,能高效地完成各种替换、删除、插入等操作,按照文件数据行顺序,重复处理满足条件的每一行数据,然后把结果展示打印,且不会改变原文件内容。sed会逐行扫描输入的数据,并将读取的数据内容复制到临时缓冲区中,称为“模式空间”(patternspace),然后拿模式空间中的数据与给......
  • 【信奥赛·算法基础】CSP-J C++ 贪心算法示例汇总
    序言为了更清晰的了解贪心算法,我把常见的贪心算法示例做了一个总结,把问题和策略,以及代码示例放到了一起,方便学习和分析,这里示例仅以C++为例,其他语言可根据示例调整即可一、钱币找零问题问题描述:给定不同面额的钱币以及每种面额的数量,用最少的钱币张数凑齐给定的总金额。......
  • 低功耗4G模组:FTP应用示例
    ​一、FTP概述FTP(FileTransferProtocol,文件传输协议)是TCP/IP协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议......
  • 将软件集成到 Windows 映像中并进行静默安装,可以使用 DISM 和适当的安装程序命令。下
    将软件集成到Windows映像中并进行静默安装,可以使用DISM和适当的安装程序命令。下面是具体的步骤和示例命令。1.准备工作确保你有一个已挂载的Windows映像。确保你有软件的安装程序,并且支持静默安装。2.挂载映像首先,挂载你的WIM文件(如果还没有挂载的话):bashCopyC......