Reflect

The Reflect registry offers tools for inspecting and manipulating data types using reflection, enabling advanced dynamic type handling within your projects.

You can easily import all the functions from the reflect registry by including the following import statement in your code

import "github.com/go-sprout/sprout/registry/reflect"

typeIs

The function compares the type of a given value (src) to a specified target type string (target). It returns true if the type of src matches the target type.

Signature

TypeIs(target string, src any) bool

Must version

{{ 42 | typeIs "int" }} // Output: true

typeIsLike

The function compares the type of a given value (src) to a target type string (target), with an option for a wildcard * prefix (pointer). It returns true if src matches target or *target, which is useful for checking if a variable is of a specific type or a pointer to that type.

Signature

TypeIsLike(target string, src any) bool

Must version

{{ 42 | typeIsLike "*int" }} // Output: true

typeOf

The function returns the type of the provided value (src) as a string, giving you a textual representation of its data type.

Signature

TypeOf(src any) string

Must version

{{ 42 | typeOf }} // Output: "int"

kindIs

The function compares the kind (category) of a given value (src) to a target kind string (target). It returns true if the kind of src matches the specified target kind.

Signature

KindIs(target string, src any) bool

Must version

{{ 42 | kindIs "int" }} // Output: true

kindOf

The function returns the kind (category) of the provided value (src) as a string, giving a general classification like "int," "struct," or "slice."

Signature

KindOf(src any) string

Must version

{{ 42 | kindOf }} // Output: "int"

deepEqual

The function checks if two variables, x and y, are deeply equal by comparing their values and structures using reflect.DeepEqual.

Signature

DeepEqual(x, y any) bool

Must version

{{ {"a":1}, {"a":1} | deepEqual }} // Output: true

deepCopy / mustDeepCopy

The function performs a deep copy of the provided element, creating an exact duplicate of its structure and data. It uses MustDeepCopy internally to manage the copy process and handle any potential errors. This use the copystructure package internally.

Signature

DeepCopy(element any) any
MustDeepCopy(element any) (any, error)

Must version

{{ {"name":"John"} | deepCopy }} // Output: {"name":"John"}

Last updated

#18: v0.5 loaders with handlers and registries

Change request updated