Description
go-enumerator
is a code generation tool designed for making constants behave more
like enums. The generated methods allow users to:
- Convert numeric constants to string representations using
fmt.Print(x)
- Parse string representations using
fmt.Scan("Name", &x)
- Check if variables hold valid enum values using
x.Defined()
- Iterate through all defined enum values using
x.Next()
go-enumerator
is designed to be invoked by go generate
,
but it can be used as a command-line tool as well.
Additional documentation available at pkg.go.dev
Installation
Installation is easy, just install the package using the go install
tool.
go install github.com/ajjensen13/go-enumerator
Overview
Below is an example of the intended use for go-enumerate
.
All command line arguments are optional go generate
.
The tool will use the $GOFILE
, $GOPACKAGE
, and $GOLINE
environment variables
to find the type declaration immediately following to //go:generate
comment.
type Kind int
const (
Kind1
Kind2
)
In this case, we found the Kind
type, which is a suitable type for generating an enum definition for.
The following methods are created in a new file with the default file name.
func (k Kind) String() string { }
func (k *Kind) Scan(ss fmt.ScanState, verb rune) error { }
func (k Kind) Defined() bool { }
func (k Kind) Next() Kind { }
String()
and Scan()
can be used in conjunction with the fmt
package to parse
and encode values into human-friendly representations.
Next()
can be used to loop through all defined values for an enum.
Defined()
can be used to ensure that a given variable holds a defined value.
go-enumerator
was inspired by stringer, which is a better String()
generator. If all you need is a String()
method for a numeric constant, consider using that tool instead.- Examples for how to use the generated code can be found at https://pkg.go.dev/github.com/ajjensen13/go-enumerator/example
- If you find this tool useful, give the repo a star! Feel free leave issues and/or suggest fixes or improvements as well 🙂