Преобразование типов в Go
Явные преобразования, псевдонимы типов и определяемые типы
«Преобразование типов в Go» — бесплатный урок Go Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Зачем нужны явные преобразования
Go никогда не выполняет неявные преобразования между типами. Это предотвращает трудноуловимые ошибки, например когда небольшое целое число незаметно переполняет больший тип или число с плавающей точкой теряет точность.
- Преобразования необходимо записывать явно:
T(value) - Компилятор обнаруживает несовместимые типы во время компиляции
- Благодаря этому код Go предсказуем и безопасен
Преобразования числовых типов
Преобразуйте числовые типы, указав целевой тип как при вызове функции:
package main
func main() {
var i int = 42
var f float64 = float64(i)
var u uint = uint(f)
_ = u
}Риск усечения
При преобразовании типа с большим диапазоном в тип с меньшим значением усекается. Ошибка не возникает — необходимо соблюдать осторожность:
package main
func main() {
big := int64(300)
small := int8(big) // 300 % 256 = 44 — silent truncation!
_ = small
}Преобразования string и []byte
Преобразование между string и []byte копирует данные:
package main
func main() {
s := "hello"
b := []byte(s) // string to byte slice
b[0] = 'H'
s2 := string(b) // byte slice to string
_ = s2
}string и []rune
Для безопасной работы с символами Unicode преобразуйте значение в []rune:
package main
func main() {
s := "Merhaba"
runes := []rune(s)
_ = len(runes) // character count, not byte count
}Пакет strconv
Для преобразования между строками и числами используйте пакет strconv:
import "strconv"
func main() {
n, err := strconv.Atoi("42") // string -> int
s := strconv.Itoa(123) // int -> string
_ = n; _ = err; _ = s
}strconv.ParseFloat и FormatFloat
Безопасно разбирайте и форматируйте строки с числами с плавающей точкой:
import "strconv"
func main() {
f, err := strconv.ParseFloat("3.14", 64)
if err != nil { return }
s := strconv.FormatFloat(f, 'f', 2, 64) // "3.14"
_ = s
}Псевдонимы типов и определённые типы
Go различает псевдонимы типов и определённые типы:
type Celsius float64— новый определённый тип; для преобразования вfloat64и обратно требуется явное преобразованиеtype Celsius = float64— псевдоним; взаимозаменяем сfloat64
Пример определённого типа
Определённые типы повышают ясность API и предотвращают случайное смешивание:
type Celsius float64
type Fahrenheit float64
func CtoF(c Celsius) Fahrenheit {
return Fahrenheit(c*9/5 + 32)
}
func main() {
boiling := Celsius(100)
_ = CtoF(boiling)
}Преобразования интерфейсных типов
Любое значение можно преобразовать в интерфейсный тип, которому оно соответствует. Для обратного преобразования требуется утверждение типа:
var i interface{} = "hello"
s, ok := i.(string) // type assertion
if ok {
_ = s // safe to use
}Быстрая проверка
Какая функция преобразует строку в тип int в Go?
Итоги: преобразования типов
Основные выводы о преобразованиях типов в Go:
- Go никогда не выполняет неявные преобразования — используйте синтаксис
T(value) - Числовые преобразования могут приводить к усечению — явно учитывайте этот риск
[]byte(s)иstring(b)копируют данные- Используйте
strconv.Atoi/strconv.Itoaдля преобразования строк в числа и чисел в строки - Для определённых типов нужны явные преобразования, а для псевдонимов — нет
Следующий курс: управление потоком выполнения с помощью if, for и switch.
Изучай Go с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 51
- Уроки
- 203
Часто задаваемые вопросы
Урок «Преобразование типов в Go» бесплатный?
Да — полный текст урока «Преобразование типов в Go» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Преобразование типов в Go»?
Явные преобразования, псевдонимы типов и определяемые типы Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Преобразование типов в Go»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Объявление переменных в Go
- Встроенные типы Go
- Константы и iota
- Преобразование типов в Go