2018-08-06 12:47:05 -07:00
|
|
|
|
cast
|
|
|
|
|
====
|
|
|
|
|
[![GoDoc](https://godoc.org/github.com/spf13/cast?status.svg)](https://godoc.org/github.com/spf13/cast)
|
2021-10-16 15:47:22 -07:00
|
|
|
|
[![Build Status](https://github.com/spf13/cast/actions/workflows/go.yml/badge.svg)](https://github.com/spf13/cast/actions/workflows/go.yml)
|
2018-08-06 12:47:05 -07:00
|
|
|
|
[![Go Report Card](https://goreportcard.com/badge/github.com/spf13/cast)](https://goreportcard.com/report/github.com/spf13/cast)
|
|
|
|
|
|
|
|
|
|
Easy and safe casting from one type to another in Go
|
|
|
|
|
|
|
|
|
|
Don’t Panic! ... Cast
|
|
|
|
|
|
|
|
|
|
## What is Cast?
|
|
|
|
|
|
|
|
|
|
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](http://hugo.spf13.com), a website engine which uses YAML, TOML or JSON
|
|
|
|
|
for meta data.
|
|
|
|
|
|
|
|
|
|
## Why use Cast?
|
|
|
|
|
|
|
|
|
|
When working with dynamic data in Go you often need to cast or convert the data
|
|
|
|
|
from one type into another. Cast goes beyond just using type assertion (though
|
|
|
|
|
it uses that when possible) to provide a very straightforward and convenient
|
|
|
|
|
library.
|
|
|
|
|
|
|
|
|
|
If you are working with interfaces to handle things like dynamic content
|
|
|
|
|
you’ll need an easy way to convert an interface into a given type. This
|
|
|
|
|
is the library for you.
|
|
|
|
|
|
|
|
|
|
If you are taking in data from YAML, TOML or JSON or other formats which lack
|
|
|
|
|
full types, then Cast is the library for you.
|
|
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
|
|
Cast provides a handful of To_____ methods. These methods will always return
|
|
|
|
|
the desired type. **If input is provided that will not convert to that type, the
|
|
|
|
|
0 or nil value for that type will be returned**.
|
|
|
|
|
|
|
|
|
|
Cast also provides identical methods To_____E. These return the same result as
|
|
|
|
|
the To_____ methods, plus an additional error which tells you if it successfully
|
|
|
|
|
converted. Using these methods you can tell the difference between when the
|
|
|
|
|
input matched the zero value or when the conversion failed and the zero value
|
|
|
|
|
was returned.
|
|
|
|
|
|
|
|
|
|
The following examples are merely a sample of what is available. Please review
|
|
|
|
|
the code for a complete set.
|
|
|
|
|
|
|
|
|
|
### 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
|
|
|
|
|
|