spf13/cast
GitHub: spf13/cast
Cast 是一个 Go 类型转换库,提供安全简洁的函数在不同类型之间进行转换,尤其适合处理来自 YAML、TOML、JSON 等弱类型格式的动态数据。
Stars: 3984 | Forks: 331
# cast
[](https://github.com/spf13/cast/actions/workflows/ci.yaml)
[](https://pkg.go.dev/mod/github.com/spf13/cast)

[](https://deps.dev/go/github.com%252Fspf13%252Fcast)
在 Go 中轻松且安全地将一种类型转换为另一种类型
不要慌张!... 用 Cast
## 什么是 Cast?
Cast 是一个库,用于以一致且简单的方式在不同的 Go 类型之间进行转换。
Cast 提供了简单的函数,可以轻松地将数字转换为字符串,将
interface 转换为 bool 等。当可以进行明显的转换时,Cast 会智能地处理。
它不会尝试猜测你的意图,例如,你只能在字符串是 int 的字符串
表示形式(如“8”)时,将其转换为 int。Cast 的开发是为了在
[Hugo](https://gohugo.io) 中使用,这是一个使用 YAML、TOML 或 JSON
作为元数据的网站引擎。
## 为什么使用 Cast?
在 Go 中处理动态数据时,你经常需要将数据
从一种类型转换或转换为另一种类型。Cast 不仅仅使用类型断言(尽管
它会在可能的情况下使用),而是提供了一个非常直接且方便的
库,超越了这一点。
如果你正在使用 interface 来处理动态内容等,
你将需要一种简单的方法将 interface 转换为给定的类型。这
就是为你准备的库。
如果你正在接收来自 YAML、TOML 或 JSON 或其他缺乏
完整类型的格式的数据,那么 Cast 就是你需要的库。
## 用法
Cast 提供了一些 To_____ 方法。这些方法将始终返回
所需的类型。**如果提供的输入无法转换为该类型,将返回该类型的 0 或 nil 值**。
Cast 还提供了相同的方法 To_____E。这些方法返回与
To_____ 方法相同的结果,外加一个额外的 error,告诉你转换是否成功
。使用这些方法,你可以区分输入
匹配了零值,还是转换失败并返回了零值。
以下示例只是可用功能的一小部分。请查看
代码以获取完整的集合。
### 示例 ‘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"
```
### 示例 ‘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
```
## 开发
该项目使用 [just](https://just.systems/) 来运行开发任务。
运行测试套件:
```
just test
```
运行 linter:
```
just lint
```
一些 linter 违规可以自动修复:
```
just fmt
```
## 许可证
该项目基于 [MIT License](LICENSE) 授权。
标签:EVTX分析, Go, Ruby工具, 开发库, 日志审计, 类型转换