专栏首页Golang语言社区Go语言类型转换库【github.com/demdxx/gocast】的用法

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

0

[0.1 1 0 0 3.1415]

3

[0 1 0 0 3]

[0.1 true false <nil> 3.1415]

false <nil>

{0 0 }

本文分享自微信公众号 - Golang语言社区(Golangweb)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-10-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 第三节:Go语言基础语法

    干货来了!!!为了让更多的小伙伴喜欢Golang、加入Golang之中来,Golang语言社区发起人彬哥联合业界大牛共同推出了Go语言基础、进阶、提高课程,目前...

    李海彬
  • Golang语言中的流程控制结构和函数详解

    流程控制 流程控制在编程语言中是最伟大的发明了,因为有了它,你可以通过很简单的流程描述来表达很复杂的逻辑。Go中流程控制分三大类:条件判断,循环控制和无条件跳转...

    李海彬
  • 伙计们,Go 并没有那么简单

    出于好奇,我最近开始接触一些 Go 的代码。我之前对它有一些了解,但是从来没有尝试去写(没有需求)。但是现在我们团队选择使用 Go 来开发一个项目,所以我觉得这...

    李海彬
  • DianNao系列加速器总结(1)——架构与运算单元简介整体架构运算模块

    月见樽
  • VBA小技巧05:将数据打印在VBE立即窗口的一行中

    通常,在编写代码时,我们会在其中放置一些Debug.Print语句,用来在立即窗口中打印程序运行过程中的一些变量值,了解程序的运行状态。一般情况下,Debug...

    fanjy
  • 现场报道 | 英伟达GTC大会开幕,盘点首日三大亮点

    机器之心报道 编辑:李泽南 昨天,GPU 开发者的年度盛会,GPU 技术大会(GPU Technology Conference,GTC)在美国加州圣何塞开始举...

    机器之心
  • Python数据可视化(2)--使用Pygal模拟掷骰子

    一、前言 可视化包Pygal可生成能缩放的矢量图像。对于需要在不同分辨率的屏幕显示图表很有用,它们可以根据屏幕大小进行缩放。

    小火柴棒
  • 一个App卖了4亿美元,这家听声识曲公司为何得到Apple的青睐?

    2018 年 9 月,苹果最终以 4 亿美金完成对 Shazam 公司的收购,让不少人为之振奋,在当时对外公布的一份声明中可以看到,自Shazam应用登陆App...

    AI科技大本营
  • 一个App卖了4亿美元,这家听声识曲公司为何得到Apple的青睐?

    2018 年 9 月,苹果最终以 4 亿美金完成对 Shazam 公司的收购,让不少人为之振奋,在当时对外公布的一份声明中可以看到,自Shazam应用登陆App...

    AI科技大本营
  • Hexo next博客添加折叠块功能添加折叠代码块

    前言 有大段的东西想要放上去,但又不想占据大量的位置。折叠是最好的选择。下面在Hexo的主题上定制添加折叠功能。 本文基于Hexo Next的主题修改。其他主题...

    Ryan-Miao

扫码关注云+社区

领取腾讯云代金券