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语言来说是没有字典这样的结构的,所以对于解析 ...
随机推荐
- Linux学习1-Xshell连接阿里云ECS服务器
前言 前段时间双十一活动,头脑发热买了个阿里云的服务器,买了后也不知道怎么用一直放着在.最近想起来,于是看了下阿里云ECS的相关资料. 由于平常一直用xshell比较多,不太习惯阿里云的ESC终端连接 ...
- jquery 实现table的行列选中效果改进
行列都可以多选,也可对相应数据进行统计: 行选中效果 列选中效果
- 点击cell动态修改高度动画
点击cell动态修改高度动画 效果 源码 https://github.com/YouXianMing/Animations // // TapCellAnimationController.m // ...
- solc 编译Solidity
安装 sudo add-apt-repository ppa:ethereum/ethereum sudo apt-get update sudo apt-get install solc 编译 so ...
- 制作高仿QQ的聊天系统(上)—— 布局文件 & 减少过度绘制
由于没有自己的服务器,我就找了个能实现双方通信的SDK,这个SDK是友盟的用户反馈SDK.本系列的博文关注的不是网络通信,而是如何在网络通信机制已经做好的情况下,做出一个可用的聊天系统.其实,刚开始做 ...
- 删除list中的特定元素
对于动态删除list中的特定元素,一般用linkedList,删除时有以下两种方法. 1. 循环遍历,找到要删除的元素后删除并且减少list长度.如果不减少list长度,那么就仅仅删除了元素,但没改变 ...
- HTML5 本地文件操作之FileSystemAPI简介
一.FileSystemAPI简介 HTML5的文件操作Api中 1.FileAPI,用于基础的客户端本地文件读取,目前大多数接口已经被主流浏览器支持,点击查看更多参考 2.FileSystemAPI ...
- 单元测试利器 JUnit 4
引言 毋庸置疑,程序员要对自己编写的代码负责,您不仅要保证它能通过编译,正常地运行,而且要满足需求和设计预期的效果.单元测试正是验证代码行为是否满足预期的有效手段之一.但不可否认,做测试是件很枯燥无趣 ...
- C/C++ 二维数组
使用C语言用到了二维数组 #include <iostream> #include <stdlib.h> using namespace std; ], int row){ ; ...
- Unique Paths II leetcode java
题目: Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. H ...