大多数写Golang的时候,都会遇到类型转换的问题,尽管Golang提供了类型转换的方法,但是,Golang规定对所有错误都必须处理的规定就让人很蛋疼,比如我只是想把 "123"这个字符串转换成 int类型的时候,我可能需要写下以下代码:

str := "123"
number,err := strconv.Atoi(str)
if err != nil {
    //该死的错误处理
}

没错,就很蛋疼,而大多数时候,我并不想要关心这些错误,我想要的只是转换类型,在不能转换的时候设置成零值或者 nil,就这么简单,而 spf13/cast的功能,刚好实现了我的需求。

关于spf13/cast库

Github:https://github.com/spf13/cast

这是一个来自于Hugo的库,就是那个写博客的Hugo,截止目前,GitHub上面有1.7k的star,口碑还是可以的。以下是官方介绍:

Cast is a library to convert between different go types in a consistent and easy way.

Cast provides simple functions to easily convert a number to a string, an interface into a bool, etc. Cast does this intelligently when an obvious conversion is possible. It doesn’t make any attempts to guess what you meant, for example you can only convert a string to an int when it is a string representation of an int such as “8”. Cast was developed for use in Hugo, a website engine which uses YAML, TOML or JSON for meta data.

怎么用

这个库的用法非常简单,就是 cast.ToXxx(a)就好了,其中,Xxx是目标类型,如果转换失败返回的是相应类型的零值。

贴几个官方的示例:

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
最后修改:2021 年 09 月 15 日
如果觉得我的文章对你有用,请随意赞赏