zoukankan      html  css  js  c++  java
  • Go语言类型转换库【github.com/demdxx/gocast】的用法

    一、导入库: go get github.com/demdxx/gocast

    二、测试代码:

     

    // main.go
    package main
    
    import (
        "fmt"
        "reflect"
    
        "github.com/demdxx/gocast"
    )
    
    type AccessRegion struct {
        region_id           int64  `tag:"RegionId"`
        provider_id         int64  `tag:"ProviderId"`
        region_name         string `tag2"RegionName"`
        sub_region_names    string
        billing_region_name string
        description         string
    }
    
    func main() {
        //数值为0,数组为空,空字符串 等情况返回true
        fmt.Println("IsEmpty:", gocast.IsEmpty(0)) //IsEmpty: true
        //转换日期,需要有时区
        t, _ := gocast.ParseTime("2012-11-01T22:08:41+00:00")
        fmt.Println("ParseTime:", t) //ParseTime: 2012-11-01 22:08:41 +0000 +0000
        //反射获取对象的列名称,如果有Tag,则优先使用其Tag值。
        var ar AccessRegion
        var props = gocast.StructFields(ar, "tag")
        for _, p := range props {
            fmt.Print(p, "	") //RegionId    ProviderId    region_name    sub_region_names    billing_region_name    description
        }
        fmt.Println()
        //反射获取对象的列名称为Key,列名称为Value的Map集合,如果有Tag,将其相应Key的Value即为Tag中指定的名称。
        var myMap map[string]string = gocast.StructFieldTags(ar, "tag")
        for k, v := range myMap {
            fmt.Print("key:", k, " value:", v, "	") //key:billing_region_name value:billing_region_name    key:description value:description    key:region_id value:RegionId    key:provider_id value:ProviderId    key:region_name value:region_name    key:sub_region_names value:sub_region_names
        }
        fmt.Println()
        //反射获取对象的列名称和有Tag时的列名的两个数组,如果没有相应tag标签时,将使用列名称。
        var keys, vals = gocast.StructFieldTagsUnsorted(ar, "tag")
        fmt.Print("Keys:")
        for _, p := range keys {
            fmt.Print(p, "	") //Keys:region_id    provider_id    region_name    sub_region_names    billing_region_name    description
        }
        fmt.Print("
    Vals:")
        for _, p := range vals {
            fmt.Print(p, "	") //Vals:RegionId    ProviderId    region_name    sub_region_names    billing_region_name    description
        }
        fmt.Println()
        //将To方法的参数1转换为参数2的类型。Tag在类型为Slice、Map、Struct时使用。
        var obj, _ = gocast.To(0, true, "")
        fmt.Println("To:", obj, " targetType:", reflect.TypeOf(obj).Kind()) //To: false  targetType: bool
        //将指定对象转为bool,其中传入的为字符串类型时,只有"true"或"1"时为true,其它为false。数值类型时,只要不是0,都为true。集合类型时,只要集合长度不为0,都为true。
        fmt.Println(gocast.ToBool(0.00001), gocast.ToBool("True") != gocast.ToBool("true")) //true true
        //将reflect.Value类型对像转为bool类型。
        fmt.Println(gocast.ToBoolByReflect(reflect.ValueOf(0.00001))) //true
        //将指定对象转换为float64类型,bool值时,true转为1,false转为0,集合类型时,返回0.
        fmt.Println(gocast.ToFloat(true)) //return 1
        //将指定对象转换为int64类型后,再转为float32类型。此方法会丢失小数位。
        fmt.Println(gocast.ToFloat32("0.001")) //return 0
        //将给定的Slice对象中的每个元素转换为float64后组合成一个[]float64对象。
        var arr = make([]interface{}, 0)
        arr = append(arr, "0.1")
        arr = append(arr, true)
        arr = append(arr, false)
        arr = append(arr, nil)
        arr = append(arr, 3.1415)
        fmt.Println(gocast.ToFloat64Slice(arr)) //[0.1 1 0 0 3.1415]
        //将指定对像转为int
        fmt.Println(gocast.ToInt("2"), gocast.ToInt(int64(3))) //2 3
        //将给定的Slice对象中的每个元素转换为float64后组合成一个[]int对象
        fmt.Println(gocast.ToIntSlice(arr)) //[0 1 0 0 3]
        //将指定的Slice存放到另一个新的Interface{}类型的Slice中。
        fmt.Println(gocast.ToInterfaceSlice(arr)) //[0.1 true false <nil> 3.1415]
        //将第一参的类型,转为指定Type的类型。Tag在类型为Slice、Map、Struct时使用。
        fmt.Println(gocast.ToT(0, reflect.TypeOf(true), "")) //false <nil>
        //将指定对像转为字符串类型,nil时将转为空字符串
        fmt.Println(gocast.ToString(nil), gocast.ToString(1), gocast.ToString(ar)) // 1 {0 0    }
    }

     

     

    三、测试结果:

    IsEmpty: true
    ParseTime: 2012-11-01 22:08:41 +0000 +0000
    RegionId    ProviderId    region_name    sub_region_names    billing_region_name    description    
    key:billing_region_name value:billing_region_name    key:description value:description    key:region_id value:RegionId    key:provider_id value:ProviderId    key:region_name value:region_name    key:sub_region_names value:sub_region_names    
    Keys:region_id    provider_id    region_name    sub_region_names    billing_region_name    description    
    Vals:RegionId    ProviderId    region_name    sub_region_names    billing_region_name    description    
    To: false  targetType: bool
    true true
    true
    1
    0
    [0.1 1 0 0 3.1415]
    2 3
    [0 1 0 0 3]
    [0.1 true false <nil> 3.1415]
    false <nil>
     1 {0 0    }
  • 相关阅读:
    限制TextBox框 所输入的字符数
    ASP.NET中使用AJAX后,Session丢失异常的自定义处理。
    用div替代模态窗口
    自动更新程序的制作方法
    常用SQL语句集合
    GridView无数据显示表头类
    密码强度
    GridView绑定技巧终结者
    js验证输入是否为手机号码或电话号码
    Js事件列表
  • 原文地址:https://www.cnblogs.com/songxingzhu/p/5851145.html
Copyright © 2011-2022 走看看