一、导入库: 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】的用法的更多相关文章

  1. Redis学习之路(008)- Redis C语言客户端库hiredis文档翻译

    Hiredis是Redis数据库一个轻量的C语言客户端库. 之所以轻量是由于它只是简单的提供了对redis操作语句支持的接口,并没有实现具体的操作语句的功能.但正是由于这种设计使我们只要熟悉了通用的r ...

  2. Standard C 语言标准函数库介绍

    全面巩固所知所学,往精通方向迈进! Standard C 语言标准函数库速查 (Cheat Sheet) from:http://ganquan.info/standard-c/function/ C ...

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

    Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解   多线程c语言linuxsemaphore条件变量 (本文的读者定位是了解Pthread常用多线程API和Pthread互斥锁 ...

  4. c语言: Standard C 语言标准函数库

    Standard C 语言标准函数库速查 (Cheat Sheet) http://ganquan.info/standard-c/ c语言标准头: <assert.h> 断言 <c ...

  5. 在Linux使用GCC编译C语言共享库

    在Linux使用GCC编译C语言共享库 对任何程序员来说库都是必不可少的.所谓的库是指已经编译好的供你使用的代码.它们常常提供一些通用功能,例如链表和二叉树可以用来保存任何数据,或者是一个特定的功能例 ...

  6. Go 语言类型转换

    类型转换用于将一种数据类型的变量转换为另外一种类型的变量.Go 语言类型转换基本格式如下: type_name(expression) type_name 为类型,expression 为表达式. 实 ...

  7. C语言函数库

    C语言函数库 分类函数目录函数进程函数诊断函数接口子程序输入输出 str字符串操作函数mem操作存贮数组 数学函数 时间日期函数 转换函数 分类函数,所在函数库为ctype.h[top] int is ...

  8. Go语言类型转换

    类型转换用于将一种数据类型的变量转换为另外一种类型的变量. Go语言类型转换基本格式如下:表达式 T(v) 将值 v 转换为类型 T . Go语言各种类型转换及函数的高级用法:strconv包实现了基 ...

  9. C语言cJSON库的使用,解析json数据格式

    C语言cJSON库的使用,解析json数据格式 摘自:https://www.cnblogs.com/piaoyang/p/9274925.html 对于c语言来说是没有字典这样的结构的,所以对于解析 ...

随机推荐

  1. 为 JIRA 6.x 安装中文语言包

    20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送) 国内私募机构九鼎控股打造,九鼎投资是在全国股 ...

  2. 理解 HTTPS 协议

    英文原文:Understanding HTTPS Protocol 最近我们看到很多站点使用 HTTPS 协议提供网页服务.通常情况下我们都是在一些包含机密信息的站点像银行看到 HTTPS 协议. 如 ...

  3. mysql慢查询监控及sql优化

    在my.ini添加如下代码,即可查看那个sql语句执行慢了 log-slow-queries = d:/log/mysql-slow.log long_query_time = 1 打开日志 log ...

  4. Java获取当前时间30天之前的时间

    //方法一 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String maxDateStr = " ...

  5. [转]php socket编程通信

    FROM : http://blog.csdn.net/baixiaoshi/article/details/9399083 今天终于测试成功了php中的socket通信,先看原理图 这里可以清晰的看 ...

  6. django外键以及主表和子表的相互查询

    Django的外键使用 from django.db import models # Create your models here. class Category(models.Model): na ...

  7. idea 2018.1破解激活方法,有效期至2099年 idea 激活 破解

    最近笔者测试了好多破解Idea的方法,最简单操作方法莫过于用license server激活,但是此类方法对最新的2017.3.2版已经无效了,亲测哦,如下图所示.  针对新版的IntelliJ ID ...

  8. 企业高并发的成熟解决方案(一)----搭建LVS负载均衡

    企业整个架构分析 1. App服务器上边部署应用,如果是java的话,一般是tomcat: 2. 负载均衡服务器负责转发请求,这种既有主机又有备机的负载均衡成为高可用(HA): 3. 一般web服务器 ...

  9. Oracle简单的备份和恢复-导出和导入(1)

    ylbtech-Oracle:Oracle简单的备份和恢复-导出和导入(1) Oracle简单的备份和恢复-导出和导入 1. 用户导出自己的表(emp,dept)返回顶部 1.1, 我们启动Oracl ...

  10. 算法生成N芒星

    前面两个图像生成算法是:道教的太极八卦图和佛教的卐和卍字图.这一节整个洋气的图像:芒星.但愿我别召唤出什么恐怖的禁忌,尤其今晚还是万圣节之夜.平时看玄幻小说,经常读到有关六芒星,七芒星,九芒星的技法. ...