How to convert a string to an integer in Go

This article considers a few different ways to convert a string to an integer in Go.

The easiest way to convert a string to an integer in Go is by using the strconv.Atoi method. It takes a string and returns the converted integer or an error if the conversion fails.

package main

import (
	"fmt"
	"log"
	"strconv"
)

func main() {
	str := "500"
	i, err := strconv.Atoi(str)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println(i) // 500
}

You can also use the strconv.ParseInt method if you want to convert a string to a integer in a number base other than 10. As mentioned in the docs, strconv.Atoi is actually equivalent to strconv.ParseInt(s, 10, 0) converted to the int type.

The first argument to ParseInt is the string to be converted. The second is the number base (0, 2 to 36), and the third is the integer type that the result must fit into (0, 8, 16, 32, and 64). 0 is equivalent to int, 8 to int8, and so on.

package main

import (
	"fmt"
	"log"
	"strconv"
)

func main() {
	str := "500"
	i, err := strconv.ParseInt(str, 10, 64)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println(i) // 500
}

Another method that may come in handy is fmt.Sscanf. This method scans the first string argument, and stores each space-separated value in the string into successive arguments as determined by the format string (second argument).

package main

import (
	"fmt"
	"log"
)

func main() {
	str := "500 1000"
	var i, j int
	_, err := fmt.Sscanf(str, "%d%d", &i, &j)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println(i, j) // 500 1000
}

This method is great if you want to extract a number from a string for example.

package main

import (
	"fmt"
	"log"
)

func main() {
	str := "http://localhost:1313"
	var i int
	_, err := fmt.Sscanf(str, "http://localhost:%d", &i)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println(i) // 1313
}

Conclusion

In this article, we considered three ways to convert a string to an integer in Go. The strconv.Atoi method should suffice for most use cases, but it’s nice to know that there are other options as well. If you have any further contribution, please leave a comment below.

Thanks for reading, and happy coding!