mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2024-12-14 19:26:43 +00:00
906639ad7e
* update viper version * removes our last uses of the slice package * fix tests
75 lines
3 KiB
Markdown
75 lines
3 KiB
Markdown
# cast
|
||
|
||
[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/spf13/cast/ci.yaml?branch=master&style=flat-square)](https://github.com/spf13/cast/actions/workflows/ci.yaml)
|
||
[![PkgGoDev](https://pkg.go.dev/badge/mod/github.com/spf13/cast)](https://pkg.go.dev/mod/github.com/spf13/cast)
|
||
![Go Version](https://img.shields.io/badge/go%20version-%3E=1.16-61CFDD.svg?style=flat-square)
|
||
[![Go Report Card](https://goreportcard.com/badge/github.com/spf13/cast?style=flat-square)](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](https://gohugo.io), 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
|