Table of contents
No headings in the article.
Ahh ! Why does Go Not support Enums . Well There is a workaround you can use to make Enum like setup in Go.
Well Go lang support only string
and int
as const
One of the ways is to do it this way.
Create a Type for you Enum and what all you want with it. example Errors. eg. can have a Message, and a Status Code
type APIError struct {
ErrorCode string `json:"error-code"`
Message string `json:"message"`
}
Now you can add up you variables using the var keyword and declaring the name and value of the constants.
var (
InvalidPayload = APIError{
ErrorCode: errorType + "01",
Message: "Invalid Payload. Check the JSON body.",
}
)
But, I know its mutable, but you want it to be constant.
so we can use something called iota
in go
type EnumType int
const (
Error1 EnumType = iota
Error2
Error3
)
iota
auto increments the const values and can be use for int constant only,
so Error1 will have value 0
Error2 will be 1
and so on ..........
And Along with this we can have a map to get the actual Error using these const as key.
func(e EnumType) GetErr() *APIError{
return mapOfErr[e]
}
var mapOfErr = map[EnumType]*APIError{
Error1: {
StatusCode: "500",
Message: "Oops! something is broken and its not you, its me.",
},
Error2: {
StatusCode: "401",
Message: " Can't remember your password correctly, we will help!",
}
}
Finally the file looks like this
package myErrors
type APIError struct {
ErrorCode string `json:"error-code"`
Message string `json:"message"`
}
type EnumType int
const (
Error1 EnumType = iota
Error2
Error3
)
func(e EnumType) GetErr() *APIError{
return mapOfErr[e]
}
var mapOfErr = map[EnumType]*APIError{
Error1: {
StatusCode: "500",
Message: Oops! something is broken and its not you, its me.",
},
Error2: {
StatusCode: "401",
Message: "Hey, you used to write 1000 words essay and can't remember your password correctly!",
}
}
For using it somewhere you can use it using -
myErrors.Error1.GetErr()
where
-myErrors
is the package name
-Error1
is the error const name and
GetErr()
it the function which we defined.
Thank you for following till the end. I write about Go and React . Follow for more such hacky solutions