Какие бывают типы в Go

В Go существует несколько основных типов, которые можно разделить на следующие категории: базовые типы, агрегированные типы, ссылочные типы и интерфейсы. Рассмотрим каждую категорию более подробно.

Базовые типы

1. Числовые типы
Целые числа:

  • `int` (размер зависит от платформы)
  • `int8`, `int16`, `int32`, `int64`
  • `uint` (беззнаковый, размер зависит от платформы)
  • `uint8` (также известен как `byte`), `uint16`, `uint32`, `uint64`

Числа с плавающей запятой:

  • `float32`, `float64`

Комплексные числа:

  • `complex64`, `complex128`

2. Булевый тип

  • `bool` (значения `true` и `false`)

3. Символьные типы

  • `byte` (аналог `uint8`)
  • `rune` (аналог `int32`, используется для представления символов Unicode)

4. Строки

  • `string` (последовательность байт, используемая для хранения текста)

Агрегированные типы

1. Массивы

  • Фиксированный размер: `[n]T` (например, `[5]int` для массива из пяти целых чисел)

2. Срезы

  • Переменный размер: `[]T` (например, `[]int` для среза целых чисел)

3. Структуры

  • Набор полей: `struct` (например, `type Person struct { Name string; Age int }`)

Ссылочные типы

1. Указатели

  • Хранит адрес переменной: `*T` (например, `*int` для указателя на целое число)

2. Карты (map)

  • Хранит пары ключ-значение: `map[K]V` (например, `map[string]int` для карты, где ключи - строки, а значения - целые числа)

3. Функции

  • Определяет тип функции: `func(параметры) возвращаемые_типы` (например, `func(int) int` для функции, принимающей целое число и возвращающей целое число)

Интерфейсы

  • Определяет методы, которые должны быть реализованы: `interface{}` (например, `type Stringer interface { String() string }`)

Рассмотрим небольшой пример, демонстрирующий использование различных типов:

```go
package main

import "fmt"

// Определение структуры
type Person struct {
    Name string
    Age  int
}

// Функция, использующая интерфейс
func (p Person) String() string {
    return fmt.Sprintf("%s (%d years old)", p.Name, p.Age)
}

func main() {
    // Пример использования базовых типов
    var age int = 30
    var name string = "Alice"
    var isStudent bool = false

    // Пример использования агрегированных типов
    var scores [3]int = [3]int{90, 85, 88}
    var people []Person = []Person{
        {Name: "Bob", Age: 25},
        {Name: "Charlie", Age: 35},
    }

    // Пример использования ссылочных типов
    var p *Person = &Person{Name: "Dave", Age: 40}
    var ageMap map[string]int = map[string]int{"Alice": 30, "Bob": 25}

    // Вывод данных
    fmt.Println("Name:", name)
    fmt.Println("Age:", age)
    fmt.Println("Is student:", isStudent)
    fmt.Println("Scores:", scores)
    fmt.Println("People:", people)
    fmt.Println("Pointer to Person:", p)
    fmt.Println("Age map:", ageMap)
}
```

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

May 22, 2024, easyoffer

Примеры ответов: