当前位置 博文首页 > golang类型转换组件Cast的使用详解

    golang类型转换组件Cast的使用详解

    作者:三十三重天 时间:2021-05-01 17:57

    开源地址

    https://github.com/spf13/cast

    Cast是什么?

    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

    js
    下一篇:没有了