Creating Enums type in GO

Creating Enums type in GO

Table of contents

No heading

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