首页 > 其他分享 >goframe之gconv支持类型转换

goframe之gconv支持类型转换

时间:2024-07-16 09:01:59浏览次数:12  
标签:类型转换 转换 gconv fmt goframe Printf 10s

GoFrame 的  gconv  模块是一个功能强大的类型转换工具,它能够将任何类型的变量转换成其他指定的类型。以下是  gconv  模块的一些常用用法:
1. 基本类型转换: gconv  提供了多种基本数据类型之间的转换功能,例如  Int ,  Uint ,  Float32 ,  Float64 ,  Bool ,  String ,  Bytes  等 。
2. Slice 类型转换:可以轻松地将变量转换成 slice 类型,如  Bytes ,  Ints ,  Floats ,  Strings ,  Interfaces  。
3. 时间类型转换: gconv  支持将变量转换为  time.Time  对象,如果变量是可解析的日期字符串,可以使用  Time  函数进行转换 。
4. Map 转换:可以将 map、struct 或 *struct 类型的变量转换为  map[string]interface{}  类型,如果变量不是这些类型之一,则转换失败并返回 nil。转换 struct 时,可以使用特定的标签来指定最优先的标签,如果没有指定,则按照  gconv 、 json 、字段名称的顺序检测标签 。
5. Struct 转换: gconv  可以将 map 或 slice 映射转换为 struct 对象。在转换过程中,可以使用  Struct  方法,并且可以指定自定义的参数名称到属性名称的映射关系 。
6. 类型名称转换: Convert  函数可以根据提供的类型名称将变量转换为相应的 Go 基本类型 。
7. 自定义规则:在处理 struct 转换时,可以使用特定的  tag  来指定参数名称,例如  p:"password1"  可以将参数  password1  映射到  Pass1  属性上 。
8. 复杂参数处理: gconv  支持智能的参数类型解析,不区分请求提交方式及请求提交类型,能够处理包括 JSON/XML 在内的复杂参数 。
 gconv  模块由于内部大量使用了断言而非反射(仅在 struct 转换时使用了反射),因此执行效率非常高,适合在项目中进行数据类型转换,特别是在 JSON/XML 等数据解析时提供更高的灵活度 。

GoFrame 的  gconv  模块提供了丰富的类型转换功能,以下是一些  gconv  的使用案例:
基本类型转换
假设我们有一个整数值,我们可以将其转换为不同的基本数据类型:
package main

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

func main() {
    i := 123
    fmt.Printf("%10s %v\n", "Int:",        gconv.Int(i))
    fmt.Printf("%10s %v\n", "Int8:",       gconv.Int8(i))
    fmt.Printf("%10s %v\n", "Int16:",      gconv.Int16(i))
    fmt.Printf("%10s %v\n", "Int32:",      gconv.Int32(i))
    fmt.Printf("%10s %v\n", "Int64:",      gconv.Int64(i))
    fmt.Printf("%10s %v\n", "Uint:",       gconv.Uint(i))
    fmt.Printf("%10s %v\n", "Float32:",    gconv.Float32(i))
    fmt.Printf("%10s %v\n", "Float64:",    gconv.Float64(i))
    fmt.Printf("%10s %v\n", "Bool:",       gconv.Bool(i))
    fmt.Printf("%10s %v\n", "String:",     gconv.String(i))
}
Slice 类型转换
将一个基本数据类型的 slice 转换为其他类型的 slice:
// 将整数数组转换为浮点数数组
intArray := []int{1, 2, 3, 4}
floatArray := gconv.Floats(intArray)
fmt.Println(floatArray)
Map 转换
将结构体或 map 转换为  map[string]interface{} :
type User struct {
    Name string
    Age  int
}

user := User{Name: "John", Age: 30}

// 转换为 map
userInfo := gconv.Map(user)
fmt.Println(userInfo)
Struct 转换
将 map 转换为结构体:
type User struct {
    Name string
    Age  int
}

userMap := map[string]interface{}{
    "Name": "John",
    "Age":  30,
}

var user User
if err := gconv.Struct(userMap, &user); err != nil {
    fmt.Println("转换错误:", err)
}
fmt.Println(user)
时间类型转换
将字符串转换为  time.Time  对象:
timeStr := "2021-01-02 15:04:05"
timeObj, err := gconv.Time(timeStr)
if err != nil {
    fmt.Println("时间转换错误:", err)
}
fmt.Println(timeObj)
类型名称转换
将变量转换为指定的 Go 基本类型名称:
var age interface{} = 25
convertedAge, err := gconv.Convert(age, "int")
if err != nil {
    fmt.Println("转换错误:", err)
}
fmt.Println(convertedAge)
请注意,上述代码示例需要在 GoFrame 的环境中运行,确保已经导入了 GoFrame 的  gconv  模块。这些示例展示了  gconv  模块在不同场景下的应用,包括基本数据类型转换、slice 转换、map 和结构体转换,以及时间类型转换等。
 

标签:类型转换,转换,gconv,fmt,goframe,Printf,10s
From: https://blog.csdn.net/leijmdas/article/details/140455220

相关文章

  • goframe gfile用法
            GoFrame的 gfile  模块提供了一套丰富的文件和目录操作方法,使得文件系统的操作变得更加简单易用。以下是一些 gfile  的常用方法及其用法:1. 获取绝对路径:使用 Abs  函数可以获取给定路径的绝对表示形式,如果路径不是绝对路径,它会与当前工作目录......
  • 记录解决QT父子窗口互传值、一些数据类型转换问题
    @目录一、父子窗口互相传值①父向子窗口传递值②子向父窗口传递值二、数据类型转换①int转QString②int转16进制③QString转unsignedchar④unchar转QString⑤char转int⑥QByteArray转16进制一、父子窗口互相传值①父向子窗口传递值父.hprivateslots:voidon_btnMore_c......
  • Java基础05:类型转换
    由于Java是强类型语言,所以要进行有些运算的时候的,需要用到类型转换。整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。转换从低级到高级(根据容量来看)。低------------------------------------------>高byte,short,char—>i......
  • java-隐式转换(自动类型提升)与强制类型转换
    前言在学习运算符的时候会遇到两个名词,一个是隐式类型转换,一个是强制类型转换隐式类型转换也就是取值范围小的数值赋值给取值范围大的变量inta=10;doubleb=a;强制类型转换就是将取值范围大的一个数值直接赋值给取值范围小的变量doubleb=10......
  • PostgreSQL 如何应对因数据类型转换导致的性能损耗?
    文章目录PostgreSQL如何应对因数据类型转换导致的性能损耗PostgreSQL如何应对因数据类型转换导致的性能损耗在数据库管理的广袤世界中,PostgreSQL如同一位可靠的伙伴,为我们提供了强大的数据存储和处理能力。然而,就像任何复杂的系统一样,它也面临着一些挑战,其中因......
  • C++ 类型转换注意事项总结
    在C++中,类型转换是编程过程中不可避免的一部分,但不当的类型转换可能会导致程序错误、数据损坏甚至程序崩溃。因此,了解类型转换的注意事项至关重要。以下是C++类型转换时需要注意的几个方面:1.区分隐式类型转换和显式类型转换隐式类型转换:由编译器自动完成,无需程序员干预。......
  • 29_instanceof关键字和类型转换
    09_instanceof关键字和类型转换instanceof用于判断对象和类的关系是否为父子//Object>String//Object>Person>Teacher//Object>Person>StudentObjectobject=newStudent();//引用object指向一个student对象System.out.println(objectinstanceofStudent);//trueSyste......
  • 【JavaSE】基础篇(六)类型转换与进制书写
    隐式转换:把一个取值范围小的数值或者变量,赋值给另一个取值范围大的变量。并转换类型。取值范围小的数据,和取值范围大的数据进行运算时,小的会先提升为大的之后,再进行运算。(byte、short、char三种数据在运算时,都会提升为int,然后再进行运算)而Java中数据类型不一致无法进行......
  • 数据分析神器Pandas快速入门3类型转换
    序列类型转换3.1自动转换在pandas1.0中,引入了一种新的转换方法.convert_dtypes。它会尝试将Series换为支持pd.NA类型。以city_mpg系列为例,它将把类型从int64转换为Int64:>>>city_mpg.convert_dtypes()01919223310417......
  • SpringMVC类型转换Converter使用
    Converter接口//S:表示接受的类型,T:表示目标类型publicinterfaceConverter<S,T>{/***实现类型转换的方法*/@NullableTconvert(Ssource);}自定义类型转换器/***@authorsongzixian*@create2019-07-23下午3:22*@description自定义类型转换器*/......