Какие бывают типы в 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