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()) //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(, 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{}, )
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(""), gocast.ToInt(int64())) //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(, reflect.TypeOf(true), "")) //false <nil>
//将指定对像转为字符串类型,nil时将转为空字符串
fmt.Println(gocast.ToString(nil), gocast.ToString(), gocast.ToString(ar)) // 1 {0 0 }
}
三、测试结果:
IsEmpty: true
ParseTime: -- :: + +
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 [0.1 3.1415] [ ]
[0.1 true false <nil> 3.1415]
false <nil>
{ }
Go语言类型转换库【github.com/demdxx/gocast】的用法的更多相关文章
- Redis学习之路(008)- Redis C语言客户端库hiredis文档翻译
Hiredis是Redis数据库一个轻量的C语言客户端库. 之所以轻量是由于它只是简单的提供了对redis操作语句支持的接口,并没有实现具体的操作语句的功能.但正是由于这种设计使我们只要熟悉了通用的r ...
- Standard C 语言标准函数库介绍
全面巩固所知所学,往精通方向迈进! Standard C 语言标准函数库速查 (Cheat Sheet) from:http://ganquan.info/standard-c/function/ C ...
- 转载~kxcfzyk:Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解
Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解 多线程c语言linuxsemaphore条件变量 (本文的读者定位是了解Pthread常用多线程API和Pthread互斥锁 ...
- c语言: Standard C 语言标准函数库
Standard C 语言标准函数库速查 (Cheat Sheet) http://ganquan.info/standard-c/ c语言标准头: <assert.h> 断言 <c ...
- 在Linux使用GCC编译C语言共享库
在Linux使用GCC编译C语言共享库 对任何程序员来说库都是必不可少的.所谓的库是指已经编译好的供你使用的代码.它们常常提供一些通用功能,例如链表和二叉树可以用来保存任何数据,或者是一个特定的功能例 ...
- Go 语言类型转换
类型转换用于将一种数据类型的变量转换为另外一种类型的变量.Go 语言类型转换基本格式如下: type_name(expression) type_name 为类型,expression 为表达式. 实 ...
- C语言函数库
C语言函数库 分类函数目录函数进程函数诊断函数接口子程序输入输出 str字符串操作函数mem操作存贮数组 数学函数 时间日期函数 转换函数 分类函数,所在函数库为ctype.h[top] int is ...
- Go语言类型转换
类型转换用于将一种数据类型的变量转换为另外一种类型的变量. Go语言类型转换基本格式如下:表达式 T(v) 将值 v 转换为类型 T . Go语言各种类型转换及函数的高级用法:strconv包实现了基 ...
- C语言cJSON库的使用,解析json数据格式
C语言cJSON库的使用,解析json数据格式 摘自:https://www.cnblogs.com/piaoyang/p/9274925.html 对于c语言来说是没有字典这样的结构的,所以对于解析 ...
随机推荐
- Java 字符串包含
函数boolean containsAny(String str, String searchChars) 判断str字符串中是否包含searchChars字符串 String khh_str = & ...
- poj Kaka's Matrix Travels
Kaka's Matrix Travels 题目: 给出一个矩阵.求仅仅能向下或者向右的情况下能得到的最大和.一般的是指遍历一次,而这个是能够反复走K次.每经过一次后就把该点设为0.求最大和. 算法: ...
- Android手机提示“未安装应用程序”
用eclipse调试应用时,遇到了这个问题,网上给出的解决方案倒是挺多,但似乎一个都没奏效,而且我手机也重启了,还是有问题,郁闷ing- 然后看到一篇文章指出,可能不是签名和SD的卡问题,而是我们 ...
- Library drmframework_jni not found
http://piotrbuda.eu/2012/06/trying-to-solve-error-491-in-play-store-on-android-emulator.html http:// ...
- 你真的懂Handler.postDelayed()的原理吗?
转载自http://www.dss886.com/2016/08/17/01/ 阅读之前先问大家一个问题:Handler.postDelayed()是先delay一定的时间,然后再放入messag ...
- confluence知识管理、团队协作软件
Confluence搭建 参见 https://confluence.atlassian.com/display/CONF54/Installing+the+Confluence+EAR-WAR+Ed ...
- [转]mysql 一个表两列的值交换
FROM : http://bbs.csdn.net/topics/380025779 mysql> select * from test1 +------+-------+-------+ | ...
- poj Dropping tests 01分数规划---Dinkelbach算法
果然比二分要快将近一倍.63MS.二分94MS. #include <iostream> #include <algorithm> #include <cstdio> ...
- Libxml2函数及使用方法概述【转】
https://blog.csdn.net/chengwenyao18/article/details/7176082 一.关于XML: 在开始研究 Libxml2 库之前,先了解一下XML的相关基础 ...
- IO流 简介 总结 API 案例 MD
目录 IO 流 简介 关闭流的正确方式 关闭流的封装方法 InputStream 转 String 的方式 转换流 InputStreamReader OutputStreamWriter 测试代码 ...