Go & Rust
May 15, 2023

Преобразования типов в Go. Часть 1

цикл статей от Viacheslav "Marpa" Sharov

Преобразование типов - процесс преобразования значения из одного типа данных в другой.

практика Go. Преобразования типов от Viacheslav "Marpa3D"

Такие преобразования -рутинная работа в деятельности программиста. Подробнее в группе VK

Давайте рассмотрим несколько примеров!

Как преобразовать строку string в int (целочисленный тип)?

Go, как и большинство современных языков, включает в себя встроенный тип данных - string.

Пример. У вас есть строка, содержащая числовое значение "108". Но, поскольку это значение представлено в виде строки, вы не можете выполнить с ним никаких математических вычислений. Вам необходимо явно преобразовать этот строковый тип в целочисленный тип, прежде чем вы сможете выполнять с ним какие-либо математические вычисления!

Для того, чтобы преобразовать строку в целочисленный тип в Golang, вы можете использовать следующие методы:

1) Функция Atoi()

Вы можете использовать функцию Atoi() пакета strconv для преобразования строки в целое значение. Atoi расшифровывается как ASCII в integer. Функция Atoi() возвращает два значения: результат преобразования и ошибку (если таковая имеется).

Синтаксис

func Atoi(s string) (int, error)

Наш пример

// преобразование строки в целое число
package main

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

func main() {
	str := "108"
	intVar, err := strconv.Atoi(str)
	
	if err != nil {
	   log.Fatal(err)
	}
	
	fmt.Println(intVar, reflect.TypeOf(intVar), err)
}

После запуска программа выведет:

108 int <nil>

2) Функция parseInt()

parseInt() интерпретирует строку s с заданной базой (от 0, 2 до 36) и разрядностью (от 0 до 64) и возвращает соответствующее значение. Эта функция принимает строковый параметр, преобразует его в соответствующий тип int на основе базового параметра. По умолчанию он возвращает значение Int64.

Синтаксис

func parseInt(s string, base int, bitSize int) (i int64, err error)

Пример:

// преобразование строки в число на основании базового параметра
package main

import (
	"fmt"
	"reflect"
	"strconv"
)

func main() {
	str := "100"

	intVar, err := strconv.ParseInt(str, 0, 8)
	fmt.Println(intVar, err, reflect.TypeOf(intVar))

	intVar, err = strconv.ParseInt(str, 0, 16)
	fmt.Println(intVar, err, reflect.TypeOf(intVar))

	intVar, err = strconv.ParseInt(str, 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

3) Функция Sscan()

В пакете fmt есть функция Sscan(), которая сканирует строковый аргумент и сохраняет в переменные. Эта функция считывает строку с пробелами и присваивает последовательным целочисленным переменным.

Пример:

package main

import (
	"fmt"
	"log"
	"reflect"
)

func main() {
	str := "108"
	intValue := 0
	_, err := fmt.Sscan(str, &intValue)
	
    if err != nil {
	   log.Fatal(err)
	}
	
	fmt.Println(intValue, reflect.TypeOf(intValue), err)
}

Результат:

100 int <nil> 

Продолжение следует... Читайте другие наши статьи здесь

С уважением, Marpa