Iota is predefined identifier which is used in constant declaration in Go. It is used to simplify incrementing value of constants.

iota value always start at 0 and increments automatically by 1 for next constant.

here’s the syntax for the iota,

const (

a = iota // 0
b = iota // 1
c = iota // 2
)

or you can simply write it as,

const (

a = iota
b
c
)

Let’s look at simple example,

package main

import "fmt"

func main() {
    const (
        a  = iota // 0
        b         // 1
        c         // 2
    )
    
    fmt.Println(a, b, c)
}

output will be,

0 1 2

Custom increment

In some use cases, we might need different kind of increment or start at 1.

    const (
        A = iota * 2 // 0
        B            // 2
        C            // 4
    )

    const (
        X = iota + 1 // 1
        Y            // 2
        Z            // 3

If you want to skip the particular value, you can do so by putting _ for example,

package main

import "fmt"

func main() {
    const (
        a  = iota // 0
        _  
        c         // 2
    )
    
    fmt.Println(a, c)
}

output will be,

0 2

Use cases

Enumerated Constants

In cases, where we want to assign integer value to constants, enumerations, it is used.

for example,

const (
    Sunday = iota // 0
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
)

File permissions

const (
    Read = 1 << iota  // 1 (001)
    Write             // 2 (010)
    Execute           // 4 (100)
)

permissions := Read | Execute
// You can check if the permission includes 'Write':
if permissions&Write != 0 {
    fmt.Println("Write permission granted")
}

Log levels

const (
    Debug = iota  // 0
    Info          // 1
    Warn          // 2
    Error         // 3
)

logLevel := Warn
if logLevel >= Error {
    fmt.Println("Critical issue detected!")
}

Units of Measurements

const (
    _   = iota // ignore first value by assigning to blank identifier
    KB = 1 << (10 * iota) // 1024
    MB                  // 1024 * 1024
    GB                  // 1024 * 1024 * 1024
)

HTTP codes

const (
    OK       = iota + 200 // 200
    Created               // 201
    Accepted              // 202
)

Using iota makes your code cleaner, more maintainable, and less error-prone by eliminating the need to manually assign values in such scenarios.

If you know any other use cases which is not mentioned in the blog, do let me know in the comments.

thank you for reading :)