Go Cast 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Go Cast 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
Go Cast 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
Go Cast 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
Go Cast 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !

软件简介

Cast是一个库,以一致和简单的方式在不同的Go类型之间转换。

Cast提供了简单的函数,可以轻松地将数字转换为字符串,将接口转换为bool类型等等。当一个明显的转换是可能的时,Cast会智能地执行这一操作。它不会试图猜测你的意思,例如,你只能将一个字符串转换为int的字符串表示形式,例如“8”。Cast是为Hugo开发的,Hugo是一个使用YAML、TOML或JSON作为元数据的网站引擎。

为什么使用Cast?

在Go中处理动态数据时,通常需要将数据从一种类型转换为另一种类型。强制转换不仅仅是使用类型断言(尽管它在可能的情况下使用类型断言),它提供了一个非常直接和方便的库。

如果您正在使用接口来处理诸如动态内容之类的事情,那么您将需要一种简单的方法来将接口转换为给定类型。

如果您从YAML、TOML或JSON或其他缺乏完整类型的格式中获取数据,那么Cast就是适合您的库。

使用方式

强制转换提供了一些To_ 的方法。这些方法将始终返回所需的类型。如果提供的输入不能转换为该类型,则返回该类型的0或nil值。

Cast也提供了 To_E相同的方法。这些方法返回与To_方法相同的结果,外加一个额外的错误,告诉您是否成功转换。使用这些方法,您可以分辨输入匹配零值时的不同,以及转换失败时返回零值时的不同。

案例

下面的例子仅仅是现有例子的一个例子。请查看完整的代码集。

Example ‘ToString’:

cast.ToString("mayonegg")         // "mayonegg"
cast.ToString(8)                  // "8"
cast.ToString(8.31)               // "8.31"
cast.ToString([]byte("one time")) // "one time"
cast.ToString(nil)                // ""
​
var foo interface{} = "one more time"
cast.ToString(foo)                // "one more time"

Example ‘ToInt’:

cast.ToInt(8)                  // 8
cast.ToInt(8.31)               // 8
cast.ToInt("8")                // 8
cast.ToInt(true)               // 1
cast.ToInt(false)              // 0
​
var eight interface{} = 8
cast.ToInt(eight)              // 8
cast.ToInt(nil)                // 0

main函数

package main
​
import (
    "fmt"
    "reflect"
​
    "github.com/spf13/cast"
)
​
func main() {
    var foo interface{} = "one more time"
    box := cast.ToString(foo)
    fmt.Println(box)
    box = cast.ToString("3.12021")
    fmt.Println(box)
​
    cvIntBox := cast.ToInt(8)
    fmt.Println(cvIntBox, reflect.TypeOf(cvIntBox))
    cvFloatBox := cast.ToFloat32(8.31)
    fmt.Println(cvFloatBox, reflect.TypeOf(cvFloatBox))
    cvBoolBox := cast.ToBool(true)
    fmt.Println(cvBoolBox, reflect.TypeOf(cvBoolBox))
}

输出

one more time 3.12021 8 int 8.31 float32 true bool

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2015/12/15 16:52

static_cast const_cast reindivter_cast dynamic_cast

C 风格(C-style)强制转型如下: (T) exdivssion // cast exdivssion to be of type T 函数风格(Function-style)强制转型使用这样的语法: T(exdivssion) // cast exdivssion to be of type T 这两种形式之间没有本质上的不同,它纯粹就是一个把括号放在哪的问题。我把这两种形式称为旧风格(old-style)的强制转型。 使用标准C++的类型转换符:static_cast 、dynamic_cast、reinterdivt_cast、和const_cast。 3.1 static_c...

0
0
发表了博客
2014/12/01 20:51

static_cast、dynamic_cast、reinterpret_cast、和const_cast

关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。 static_cast 用法:static_cast < type-id > ( expression ) 该运算符把expression转换为type-id类型,但...

0
0
发表了博客
2014/05/08 23:42

static_cast, dynamic_cast, const_cast探讨

一、隐式类型转换 二、显示类型转换 static_cast 用法:static_cast < type-id > ( expression ) 说明:该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。 需要转换的几种情况: 情况1:void指针->其他类型指针 情况2:改变通常的标准转换 情况3:避免出现可能多种转换的歧义 dynamic_cast 用法:dynamic_cast < type-id > ( expression ) 说明:该运算符把expression转换成type-id类型的对象。...

0
0
发表了博客
2019/07/02 09:51

dynamic_cast和static_cast

1. static_cast在c++中类似于c中的强制类型转换 2.dynamic_cast, C++提供了dynamic_cast函数用于动态转型,相比C风格的强制类型转换和C++ reinterpret_cast,dynamic_cast提供了类型安全检查,所以在多态类型间进行转换更提倡采用dynamic_cast。 基本用法 dynamic_cast可以获取目标对象的引用或指针: 1 T1 obj; 2 3 T2* pObj = dynamic_cast<T2*>(&obj);//转换为T2指针,失败返回NULL 4 5 T2& refObj = dynamic_cast<T2&...

0
0
发表了博客
2011/04/17 22:59

static_cast,const_cast,dynamic_cast,reinterpret...

标准C++不仅支持C风格类型转换符,还定义了以下四种类型转换符: static_cast const_cast dynamic_cast reinterpret_cast 定义这些类型转换符是为了提供更好的类型检查。 一、C风格类型转换符的缺点 C++支持以下两种形式的C风格类型转换: int age=(int)sqrt(foo/3.25);   int age=int(sqrt(foo/3.25)); 但是,这样会使程序的意图不明确,因为相同的语法你却使用不同的类型转换符… (译者:不是很明白这一段是什么意...

0
1
发表了博客
2020/06/01 10:32

什么时候应该使用static_cast,dynamic_cast,const_cast和reinterpret_cast?

问题: What are the proper uses of: 的正确用法是: static_cast dynamic_cast const_cast reinterpret_cast C-style cast (type)value C样式转换(type)value Function-style cast type(value) 函数样式转换type(value) How does one decide which to use in which specific cases? 如何决定在特定情况下使用哪个? 解决方案: 参考一: https://stackoom.com/question/1ONK/什么时候应该使用static-cast-dynamic-cast-const-...

0
0
发表了博客
2019/12/03 11:58

什么时候应该使用static_cast,dynamic_cast,const_cast和reinterpret_cast?

的正确用法是: static_cast dynamic_cast const_cast reinterpret_cast C样式转换(type)value 函数样式转换type(value) 如何决定在特定情况下使用哪个? #1楼 (上面已经给出了很多理论和概念上的解释) 下面是当我使用static_cast , dynamic_cast , const_cast , reinterpret_cast时的一些实际示例 。 (也参考此以理解说明: http : //www.cplusplus.com/doc/tutorial/typecasting/ ) static_cast: OnEventData(void* ...

0
0
发表了博客
2020/03/27 10:15

什么时候应该使用static_cast,dynamic_cast,const_cast和reinterpret_cast?

问题: What are the proper uses of: 的正确用法是: static_cast dynamic_cast const_cast reinterpret_cast C-style cast (type)value C样式转换(type)value Function-style cast type(value) 函数样式转换type(value) How does one decide which to use in which specific cases? 如何决定在特定情况下使用哪个? 解决方案: 参考一: https://stackoom.com/question/1ONK/什么时候应该使用static-cast-dynamic-cast-const-...

0
0
发表了博客
2020/08/01 21:24

什么时候应该使用static_cast,dynamic_cast,const_cast和reinterpret_cast?

问题: What are the proper uses of: 的正确用法是: static_cast dynamic_cast const_cast reinterpret_cast C-style cast (type)value C样式转换(type)value Function-style cast type(value) 函数样式转换type(value) How does one decide which to use in which specific cases? 如何决定在特定情况下使用哪个? 解决方案: 参考一: https://stackoom.com/question/1ONK/什么时候应该使用static-cast-dynamic-cast-const-...

0
0
发表了博客
2014/03/26 15:18

static_cast、dynamic_cast、reinterpret_cast、和const_c

首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换 又称为“标准转换”,包括以下几种情况: 1) 算术转换(Arithmetic conversion) : 在混合类型的算术表达式中, 最宽的数据类型成为目标转换类型。 int ival = 3; double dval = 3.14159; ival + dval;//ival被提升为double类型 2)一种类型表达式赋值给另一种类型的对象:目标类型是被赋值对象的类型 int *pi = 0; // 0被转化为int...

0
3
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
4 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部