39 lines
1.2 KiB
Markdown
39 lines
1.2 KiB
Markdown
|
# Reflection Functions
|
||
|
|
||
|
Sprig provides rudimentary reflection tools. These help advanced template
|
||
|
developers understand the underlying Go type information for a particular value.
|
||
|
|
||
|
Go has several primitive _kinds_, like `string`, `slice`, `int64`, and `bool`.
|
||
|
|
||
|
Go has an open _type_ system that allows developers to create their own types.
|
||
|
|
||
|
Sprig provides a set of functions for each.
|
||
|
|
||
|
## Kind Functions
|
||
|
|
||
|
There are two Kind functions: `kindOf` returns the kind of an object.
|
||
|
|
||
|
```
|
||
|
kindOf "hello"
|
||
|
```
|
||
|
|
||
|
The above would return `string`. For simple tests (like in `if` blocks), the
|
||
|
`isKind` function will let you verify that a value is a particular kind:
|
||
|
|
||
|
```
|
||
|
kindIs "int" 123
|
||
|
```
|
||
|
|
||
|
The above will return `true`
|
||
|
|
||
|
## Type Functions
|
||
|
|
||
|
Types are slightly harder to work with, so there are three different functions:
|
||
|
|
||
|
- `typeOf` returns the underlying type of a value: `typeOf $foo`
|
||
|
- `typeIs` is like `kindIs`, but for types: `typeIs "*io.Buffer" $myVal`
|
||
|
- `typeIsLike` works as `kindIs`, except that it also dereferences pointers.
|
||
|
|
||
|
**Note:** None of these can test whether or not something implements a given
|
||
|
interface, since doing so would require compiling the interface in ahead of time.
|