Go Academy · Урок

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

Явные преобразования, псевдонимы типов и определяемые типы

Урок 4 из 412 шагов

«Преобразование типов в 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 — локальная установка не требуется.

Все уроки этого курса

  1. Объявление переменных в Go
  2. Встроенные типы Go
  3. Константы и iota
  4. Преобразование типов в Go
← Назад к Go Academy