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, "\t") //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, "\t") //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, "\t") //Keys:region_id    provider_id    region_name    sub_region_names    billing_region_name    description
    }
    fmt.Print("\r\nVals:")
    for _, p := range vals {
        fmt.Print(p, "\t") //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    }
时间: 2024-12-29 06:10:23

Go语言类型转换库【github.com/demdxx/gocast】的用法的相关文章

程序设计语言-标准库概述

1 认识标准库 没有任何一个重要程序只用某种赤裸裸的程序设计语言写出的:首先总要开发出一组支持库,这也形成了进一步工作的基础. 2 第一个程序 #include<iostream>  //指编译器包含位于iostream里的标准流I/O功能的声明 int main() //定义一个main()函数,该函数没有参数,也不做任何事情 { std::cout<<"hello,world!\n"; //字符串文字量"hello,world!\n"将被

Standard C 语言标准函数库介绍

全面巩固所知所学,往精通方向迈进! Standard C 语言标准函数库速查 (Cheat Sheet) from:http://ganquan.info/standard-c/function/ C语言标准头 <assert.h> 断言 <ctype.h> 字符类测试 <errno.h> (部分)库函数抛出的错误代码 <float.h> 浮点数运算 <limits.h> 检测整型数据类型值范围 <locale.h> 本土化 <

转载~kxcfzyk:Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解

Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解 多线程c语言linuxsemaphore条件变量 (本文的读者定位是了解Pthread常用多线程API和Pthread互斥锁,但是对条件变量完全不知道或者不完全了解的人群.如果您对这些都没什么概念,可能需要先了解一些基础知识) 关于条件变量典型的实际应用,可以参考非常精简的Linux线程池实现(一)——使用互斥锁和条件变量,但如果对条件变量不熟悉最好先看完本文. Pthread库的条件变量机制的主要API有三个: int p

018_C语言静态库动态库

 linux下C语言编程环境 头文件目录:/usr/include/ 库目录:/usr/lib/ 动态库与静态库的区别:在计算机程序源代码需要通过翻译.汇编.链接过程而生成可执行文件,再由加载器加载到内存,两者区别就在于程序加载时链接到相应库的方式不同,程序编译时指定了静态库,编译后可直接运行,而编译时指定动态库时,编译后还要先指定库的路径. 静态库: ar -rs libmy_math.a *.o 生成静态库libmy_math.a ar -t 查看静态库 gcc test.c -L. -

Json 在线格式化与定义、各语言开源库集锦

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. http://www.json.org/json-zh.html 该链接是目前使用过的最好用的在线格式化.格式校验和结构化 JSON 工具. 很多

C语言类型转换与原型申明

C语言类型转换与原型申明 关于整型字面值 字面值这个术语是字面常量值的缩写,指定了自身的值,并且不允许发生改变.当有一程序内出现整形字面值时,它是属于整型家庭9种不同类型中的哪一种呢?这取决于如何书写,例如下整型字面值后添加字符L(长整型).U(无符号整型).另外,字符常量(例:'M'.'\377')的类型总是int. 类型转换 c语言中类型转换比一般人想象的要广泛得多.在涉及类型小于int或double的表达式中都可能发生转换.下面程序执行结果是4. printf("%d",size

GO语言学习(十七)Go 语言类型转换

Go 语言类型转换 类型转换用于将一种数据类型的变量转换为另外一种类型的变量.Go 语言类型转换基本格式如下: type_name(expression) type_name 为类型,expression 为表达式. 实例 以下实例中将整型转化为浮点型,并计算结果,将结果赋值给浮点型变量: package main import "fmt" func main() { var sum int = 17 var count int = 5 var mean float32 mean =

C语言---类型转换

itoa 功 能:把一整数转换为字符串 用 法:char *itoa(int value, char *string, int radix); 详细解释:itoa是英文integer to array(将int整型数转化为一个字符串,并将值保存在数组string中)的缩写. 参数: value: 待转化的整数. radix: 是基数的意思,即先将value转化为radix进制的数,范围介于2-36,比如10表示10进制,16表示16进制. * string: 保存转换后得到的字符串. 返回值:

Swift 语言指南--来自github学习

@SwiftLanguage 更新于 2016-6-6,更新内容详见 Issue 55.往期更新回顾详见<收录周报> 这份指南汇集了 Swift 语言主流学习资源,并以开发者的视角整理编排.对于精选项目及文章,可直接访问<Swift 项目精选>和<Swift 文章精选>.还有开发者们自己维护的<Swift 开发者.项目.最佳实践>.当然也不能错过那些活跃.优秀的<开发者个人资料页>. 目录 入门指引 教程文章 开源项目 推荐网站 开发工具 媒体报