/
Программирование
/
Курс Golang
/

Преобразование типов

Golang: Преобразование типов

В языке Go преобразование типов всегда выполняется явно. Это означает, что нельзя просто сложить int и float64, или передать int в функцию, ожидающую string. Явное преобразование требуется везде, где участвуют разные типы.

Преобразование между числовыми типами

var a int = 10
var b float64 = float64(a)

Преобразование int в float64. Без него компилятор выдаст ошибку:

var a int = 10
var b float64 = a // ошибка: нельзя неявно преобразовать int в float64

Преобразование float64 в int

var f float64 = 3.9
var i int = int(f)
fmt.Println(i) // => 3

Преобразование отбрасывает дробную часть.

Преобразование int в string

Чтобы получить строковое представление числа, используется strconv.Itoa():

import "strconv"

var n int = 65
fmt.Println(strconv.Itoa(n)) // => "65"

Преобразование string в int

import "strconv"

var s string = "42"
n, err := strconv.Atoi(s)
fmt.Println(n) // => 42

Строку нельзя просто привести к числу. Используется strconv.Atoi(), потому что строка может содержать любое значение, не обязательно число.

Преобразование bool

bool не может быть приведён ни к числу, ни к строке напрямую.

var flag bool = true
// var x int = int(flag) // ошибка: нельзя преобразовать bool в int
// var s string = string(flag) // ошибка: нельзя преобразовать bool в string

Для строк используется fmt.Sprintf():

import "fmt"

var flag bool = true
s := fmt.Sprintf("%v", flag)
fmt.Println(s) // "true"

Ошибки при несовместимых типах

Go не делает неявных преобразований между несовместимыми типами:

var x int = 10
var y uint = uint(x) // допустимо: явное преобразование

// Компилятор выдаст предупреждение
// conversion from int to string yields a string of one rune, not a string of digits
var z string = string(x)
fmt.Println(z) // символ с кодом 10, а не "10"
fmt.Println(y)

Задание

Создайте функцию BuildProfile(name string, age int, rating float64) string, которая возвращает строку профиля пользователя в формате:

"Name: <name>, Age: <age>, Rating: <rating>"

Примеры

fmt.Println(BuildProfile("Alice", 30, 4.73))
// => "Name: Alice, Age: 30, Rating: 4.7"

fmt.Println(BuildProfile("Bob", 25, 5))
// => "Name: Bob, Age: 25, Rating: 5.0"

Полезное

  • Пакет strconv реализует преобразования в строковые представления основных типов данных и обратно.

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются