Как преобразовать строку в целочисленный тип в Go?
Как и большинство современных языков, Golang включает строки в качестве встроенного типа. Возьмем пример, у вас может быть строка, содержащая числовое значение «100». Однако, поскольку это значение представлено в виде строки, с ним нельзя выполнять какие-либо математические вычисления. Вам необходимо явно преобразовать этот строковый тип в целочисленный тип, прежде чем вы сможете выполнять над ним какие-либо математические вычисления. Чтобы преобразовать строку в целочисленный тип в Golang, вы можете использовать следующие методы.
Atoi() Функция
Вы можете использовать функцию Atoi() пакета strconv для преобразования строки в целочисленное значение. Функция Atoi() возвращает два значения: результат преобразования и ошибку (если она есть).
Синтаксис:
func Atoi(s string) (int, error)
package main
import (
"fmt"
"strconv"
"reflect"
)
func main() {
strVar := "100"
intVar, err := strconv.Atoi(strVar)
fmt.Println(intVar, err, reflect.TypeOf(intVar))
}
Вывод:
100 <nil> int
ParseInt() Функция
ParseInt интерпретирует строку s с заданным основанием (от 0, 2 до 36) и разрядностью (от 0 до 64) и возвращает соответствующее значение i. Эта функция принимает строковый параметр, преобразует его в соответствующий тип int. По умолчанию возвращает значение Int64.
func ParseInt(s string, base int, bitSize int) (i int64, err error)
package main
import (
"fmt"
"reflect"
"strconv"
)
func main() {
strVar := "100"
intVar, err := strconv.ParseInt(strVar, 0, 8)
fmt.Println(intVar, err, reflect.TypeOf(intVar))
intVar, err = strconv.ParseInt(strVar, 0, 16)
fmt.Println(intVar, err, reflect.TypeOf(intVar))
intVar, err = strconv.ParseInt(strVar, 0, 32)
fmt.Println(intVar, err, reflect.TypeOf(intVar))
intVar, err = strconv.ParseInt(strVar, 0, 64)
fmt.Println(intVar, err, reflect.TypeOf(intVar))
}
Вывод:
100 <nil> int64
100 <nil> int64
100 <nil> int64
100 <nil> int64
fmt.Sscan
Пакет fmt предоставляет функцию sscan(), которая сканирует строковые аргументы и сохраняет их в переменных. Эта функция считывает строку с пробелами и присваивает ей последовательные целочисленные переменные.
package main
import (
"fmt"
"reflect"
)
func main() {
strVar := "100"
intValue := 0
_, err := fmt.Sscan(strVar, &intValue)
fmt.Println(intValue, err, reflect.TypeOf(intValue))
}
Вывод:
100 <nil> int