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语言来说是没有字典这样的结构的,所以对于解析 ...
随机推荐
- Redis客户端集群
1.Redis集群一般分为两类,即3.0版本后的服务端集群实现,3.0版本前的客户端集群实现,服务端集群即Redis Cluster(官方实现),采用slot槽的概念(分片,所有服务端redi ...
- Tomcat启动log打印到INFO: At least one JAR was scanned for TLDs yet contained no TLD各种解决方式
问题: 启动tomcat时,catalina.out日志打印到如下内容就停止不动了,也不报错 SEVERE: FarmWarDeployer can only work as host cluster ...
- java过滤特殊字符的正则表达式
// 过滤特殊字符 public staticString StringFilter(String str) throws PatternSyntaxException { // 只允许字母和数字 / ...
- Android之在string.xml配置文字颜色粗体等效果
string.xml <string name="exchange_txt_hint"><Data><![CDATA[请使用<font colo ...
- Android之仿心跳动画实现
// 按钮模拟心脏跳动 private void playHeartbeatAnimation() { AnimationSet animationSet = new AnimationSet(tru ...
- 限制EditText必须输入中文的方法
给EditText做限制时,我们想要输入的字符串必须都是中文,不出现任何其他字符,下面的类可以很好的实现这个要求. InputLenLimit.java package com.kale.button ...
- cat、tac、rev、nl命令
当日志文件log.log很长,但又要按内容从后往前查看时,可以使用如下命令: tac log.log | more cat 由第一行开始显示内容,并将所有内容输出 tac 从最后 ...
- C#中的命名空间namespace与Java中的包package之间的区别
Java 包被用来组织文件或公共类型以避免类型冲突.包结构可以映射到文件系统. System.Security.Cryptography.AsymmetricAlgorithm aa; 可能被替换: ...
- 虚拟私有云(Virtual Private Cloud,专有网络)配置方式总结
虚拟私有云 虚拟私有云(Virtual Private Cloud)是用户在云上申请的隔离的.私密的虚拟网络环境.用户可以自由配置VPC内的IP地址段.子网.安全组等子服务,也可以申请弹性带宽和弹性公 ...
- 请求被中止: 未能创建 SSL/TLS 安全通道,设置 TLSv1.2和TLSv1.1版本 .基础链接已经关闭,发送时发生错误
WSO2 API访问的安全要求, 只能提供TLSv1.2和TLSv1.1版本,其它SSL版本协议因为存在较高安全漏洞问题会被disable. A 改成TLSv1.1或TLSv1.2,最好使用TLSv1 ...