The strconv package converts between strings and basic values, with error reporting when parsing fails.

conversion A conversion helper turns text into a typed value or reports why it could not.

Strconv Conversion

raw
strconv_conversion.go
Replay: real traced execution (multi-file project)
package main

import (
	"fmt"
	"strconv"
)

func main() {
	var raw = "42"
	value, err := strconv.Atoi(raw)
	ok := err == nil

	if !ok {
		value = 0
	}

	fmt.Println("raw=", raw)
	fmt.Println("ok=", ok)
	fmt.Println("value=", value)
}
package main

import (
	"fmt"
	"strconv"
)

func main() {
	var raw = "7"
	value, err := strconv.Atoi(raw)
	ok := err == nil

	if !ok {
		value = 0
	}

	fmt.Println("raw=", raw)
	fmt.Println("ok=", ok)
	fmt.Println("value=", value)
}
package main

import (
	"fmt"
	"strconv"
)

func main() {
	var raw = "bad"
	value, err := strconv.Atoi(raw)
	ok := err == nil

	if !ok {
		value = 0
	}

	fmt.Println("raw=", raw)
	fmt.Println("ok=", ok)
	fmt.Println("value=", value)
}
  1. raw ← "42", value ← 42, err ← <nil>, ok ← true

    8func main() {9  var raw→ "42" = "42" //@raw="7", "bad"10  value→ 42, err→ <nil> := strconv.Atoi(raw"42")11  ok→ true := err<nil> == nil1213  if !ok {14    value = 015  }1617  fmt.Println("raw=", raw"42")18  fmt.Println("ok=", oktrue)19  fmt.Println("value=", value42)20}
    outputraw= 42
    ok= true
    value= 42
  1. raw ← "7", value ← 7, err ← <nil>, ok ← true

    8func main() {9  var raw→ "7" = "7"10  value→ 7, err→ <nil> := strconv.Atoi(raw"7")11  ok→ true := err<nil> == nil1213  if !ok {14    value = 015  }1617  fmt.Println("raw=", raw"7")18  fmt.Println("ok=", oktrue)19  fmt.Println("value=", value7)20}
    outputraw= 7
    ok= true
    value= 7
  1. raw ← "bad", value ← 0, err ← &strconv.NumError{Func:"Atoi", Num:"bad", Err:(*errors.errorString)(⟨addr A⟩)}

    8func main() {9  var raw→ "bad" = "bad"10  value→ 0, err→ &strconv.NumError{Func:"Atoi", Num:"bad", Err:(*errors.errorString)(⟨addr A⟩)} := strconv.Atoi(raw"bad")11  ok→ false := err&strconv.NumError{Func:"Atoi", Num:"bad", Err:(*errors.errorString)(⟨addr A⟩)} == nil
  2. if !ok

    13if !okfalse {14  value0 = 015}
  3. fmt.Println("raw=", raw)

    17  fmt.Println("raw=", raw"bad")18  fmt.Println("ok=", okfalse)19  fmt.Println("value=", value0)20}
    outputraw= bad
    ok= false
    value= 0