Golang strconv.Atoi
last modified April 20, 2025
This tutorial explains how to use the strconv.Atoi
function in Go.
We'll cover string-to-integer conversion basics with practical examples.
The strconv.Atoi function converts a string to an integer. It's one of the most commonly used functions in Go for parsing numeric input.
Atoi stands for "ASCII to integer". The function returns two values: the parsed integer and an error. This is Go's idiomatic way of handling potential failures.
Basic strconv.Atoi Example
The simplest use of strconv.Atoi
converts a numeric string to an
integer. Here we demonstrate successful conversion and error handling.
package main import ( "fmt" "strconv" ) func main() { numStr := "42" num, err := strconv.Atoi(numStr) if err != nil { fmt.Println("Conversion error:", err) return } fmt.Printf("String '%s' converted to integer %d\n", numStr, num) }
We convert the string "42" to an integer. The error is checked to handle cases where conversion fails. Successful conversion prints the integer value.
Handling Conversion Errors
strconv.Atoi
returns an error for invalid numeric strings. This
example shows proper error handling for different input cases.
package main import ( "fmt" "strconv" ) func main() { testCases := []string{"123", "12.3", "abc", "123abc", ""} for _, tc := range testCases { num, err := strconv.Atoi(tc) if err != nil { fmt.Printf("'%s' is not a valid integer: %v\n", tc, err) } else { fmt.Printf("'%s' converted to %d\n", tc, num) } } }
We test various string inputs, including valid and invalid cases. The error message helps identify why conversion failed for each invalid input.
Converting User Input
A common use case is converting command-line arguments or user input. This example demonstrates reading and converting numbers from standard input.
package main import ( "bufio" "fmt" "os" "strconv" "strings" ) func main() { reader := bufio.NewReader(os.Stdin) fmt.Print("Enter a number: ") input, _ := reader.ReadString('\n') input = strings.TrimSpace(input) num, err := strconv.Atoi(input) if err != nil { fmt.Println("Please enter a valid integer") return } fmt.Printf("You entered: %d (double: %d)\n", num, num*2) }
We read user input, trim whitespace, then attempt conversion. The program provides feedback for invalid input and demonstrates using the converted value.
Working with Different Bases
While Atoi
only handles base 10, we can use ParseInt
for other bases. This example shows both approaches.
package main import ( "fmt" "strconv" ) func main() { // Base 10 with Atoi num1, _ := strconv.Atoi("42") fmt.Println("Base 10:", num1) // Hexadecimal with ParseInt num2, _ := strconv.ParseInt("2a", 16, 64) fmt.Println("Hexadecimal:", num2) // Binary with ParseInt num3, _ := strconv.ParseInt("1010", 2, 64) fmt.Println("Binary:", num3) }
Atoi
is equivalent to ParseInt(s, 10, 0)
. For other
bases, ParseInt
must be used directly with the appropriate base.
Performance Considerations
For performance-critical code, avoiding repeated conversions can help. This
example benchmarks Atoi
against alternatives.
package main import ( "fmt" "strconv" "time" ) func main() { const iterations = 1000000 testStr := "12345" // Benchmark Atoi start := time.Now() for i := 0; i < iterations; i++ { strconv.Atoi(testStr) } fmt.Println("Atoi duration:", time.Since(start)) // Benchmark ParseInt start = time.Now() for i := 0; i < iterations; i++ { strconv.ParseInt(testStr, 10, 64) } fmt.Println("ParseInt duration:", time.Since(start)) }
Atoi
is slightly faster than ParseInt
for base 10
conversions. However, the difference is usually negligible for most use cases.
Alternative: fmt.Sscanf
fmt.Sscanf
provides another way to parse integers from strings.
This example compares it with Atoi
.
package main import ( "fmt" "strconv" ) func main() { numStr := "42" // Using Atoi num1, err1 := strconv.Atoi(numStr) if err1 != nil { fmt.Println("Atoi error:", err1) } else { fmt.Println("Atoi result:", num1) } // Using Sscanf var num2 int _, err2 := fmt.Sscanf(numStr, "%d", &num2) if err2 != nil { fmt.Println("Sscanf error:", err2) } else { fmt.Println("Sscanf result:", num2) } }
Sscanf
is more flexible but slower than Atoi
. Use
Atoi
for simple integer conversions and Sscanf
for
more complex parsing needs.
Practical Example: Summing Numbers
This practical example demonstrates using Atoi
to sum numbers from
command-line arguments with proper error handling.
package main import ( "fmt" "os" "strconv" ) func main() { if len(os.Args) < 2 { fmt.Println("Please provide numbers to sum") return } var sum int for _, arg := range os.Args[1:] { num, err := strconv.Atoi(arg) if err != nil { fmt.Printf("'%s' is not a valid number\n", arg) return } sum += num } fmt.Println("Sum:", sum) }
We iterate through command-line arguments, convert each to an integer, and accumulate the sum. Invalid numbers terminate the program with an error message.
Source
Go strconv package documentation
This tutorial covered the strconv.Atoi
function in Go with
practical examples of string-to-integer conversion in various scenarios.
Author
List all Go tutorials.