大多数写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