Статьи

Какие типы Голанга

Go — это строго типизированный язык, а тип — это жизнь. Этот язык имеет богатые типы и хорошую поддержку для расширения типа. Тип обеспечивает целостность.

В этой статье я расскажу о некоторых примитивных типах и о том, как Go их обрабатывает.

В компьютере все равно 0 или 1, и только эти 2 значения используются для представления любых значений, которые мы хотим.

Расположение 0 или 1 говорит о том, что является значением.

Возьмите пример значения байта в некоторой области памяти:

Голанг Типы

Что это такое ? Вам нужна информация о типе.

Если тип int, то значение равно 10, если тип enum, то у нас есть другое значение.

Информация о типе говорит нам о значении и размере, например, если тип является логическим, то он сообщает, что это однобайтовое значение.

Информацию о типах, поддерживаемых Go, можно найти на странице Lang Spec Types .

Как объявить переменную?

1
var variablename type<br><br>variablename := value // Short declaration

Оба из вышеперечисленных объявляют переменную, но способ ее инициализации сильно отличается.

Var создает и инициализирует со значением ZERO своего типа, значение Zero очень особенное, оно делает код свободным и чистым! Нет нулевых проверок.

Нулевое значение основано на типе, поэтому для целочисленного типа оно равно нулю, логическое — ложно, строка — пуста.

Go имеет некоторый тип, например int, который получает размер на основе базовой архитектуры, например, он будет 4 байта (то есть 32-битная дуга) или 8 байтов (64-битная дуга). Это также хороший пример механической симпатии к базовой платформе.

Примеры объявления переменных:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var value int
    var f float64
    var b bool
    var by byte
    var name string
    var x rune
 
    //Variable are declared and initialized by compiler to ZERO VALUE of its type
 
    fmt.Printf("value %T -> (%v) \n", value, value)
    fmt.Printf("f %T -> (%v) \n", f, f)
    fmt.Printf("b %T -> (%v) \n", b, b)
    fmt.Printf("by %T -> (%v) \n", by, by)
    fmt.Printf("name %T -> (%v) \n", name, name)
    fmt.Printf("x %T -> (%v) \n", x, x)
 
    fmt.Println("*******************")
 
    value1 := 10
    f1 := 3.14
    b1 := true
    name1 := "Say Hello"
    x1 := 100
    fmt.Printf("value %T -> (%v) \n", value1, value1)
    fmt.Printf("f %T -> (%v) \n", f1, f1)
    fmt.Printf("b %T -> (%v) \n", b1, b1)
    fmt.Printf("name %T -> (%v) \n", name1, name1)
    fmt.Printf("x %T -> (%v) \n", x1, x1)

Псевдоним для встроенного типа

Это очень мощная функция, которая позволяет расширять встроенные типы путем добавления поведения.

Пример псевдонима типа:

01
02
03
04
05
06
07
08
09
10
11
12
13
//Create Alias for int type
type RichInt int
 
func main() {
 
    var ri RichInt
    ri = 100
 
    fmt.Println("Value of rich int", ri)
    fmt.Println("Convert to Int", int(ri))
    fmt.Println("From int to Rich Int", RichInt(100))
    fmt.Println("Binary Value", ri.toBinary())
}

В приведенном выше примере RichInt имеет функцию toBinary, которая возвращает двоичное значение. Позже я поделюсь, как расширить типы, когда мы исследуем методы типов.

Кастинг против конверсии

Кастинг — это магия, он позволяет неявно конвертировать один тип в другой. Сколько раз в java вы теряли значение, когда использовали long / int casting или double / float?

Go имеет концепцию конверсии. Вы явно конвертируете из x в y и оплачиваете стоимость дополнительной памяти за счет безопасности.

Go Lang Spec имеет несколько хороших примеров.

Несколько реальных пользовательских типов

В Go lang есть поддержка типа Struct, это чистый тип значения, к которому не прилагается шум поведения.

Это дает контроль над макетом памяти, вы можете выбрать действительно компактный макет памяти, чтобы избежать заполнения или добавить заполнение, если требуется.

Структура может быть объявлена ​​как ниже:

1
2
3
4
5
type person struct {
 firstName string
 lastName  string
        age int
}

Как только структура определена, мы можем создать значение типа структуры.

Это ценность, а не объект, просто запомните это!

Значение может быть создано с помощью приведенного ниже кода:

1
var p1 person

Приведенный выше код создал значение и инициализировал его нулевым значением, строка инициализируется пустым значением, а int — 0.

При обработке p1 проверка нуля не требуется, поскольку она инициализируется нулевым значением.

Короткое объявление может использоваться для указания ненулевого или другого значения:

1
p2 := person{firstName: "James", lastName: "Bond", age: 35}

Нулевая ценность и удобный способ создания стоимости убивает необходимость иметь конструктор или деструктор в Go.

Теперь вы можете начать видеть силу ценности. Никаких накладных расходов на конструктор / деструктор / или сложный жизненный цикл.

Я знаю, что у вас возникнет вопрос по поводу специального кода инициализации или кода очистки, который требуется?

Поведение обрабатывается очень по-разному, мы рассмотрим это позже.

Struct также может быть вложенным, а нулевое значение или короткое объявление работает как волшебство!

Мы создадим дополнительную структуру:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
ype address struct {
 address1 string
 address2 string
 city     string
}
 
type contact struct {
 landLine int
 mobile   int
}
 
type person struct {
 firstName      string
 lastName       string
 age            int
 add            address
 contactDetails contact
}
 
p3 := person{firstName: "James", lastName: "Bond", age: 35,
  add:            address{address1: "30 Wellington Square", address2: "Street 81"},
  contactDetails: contact{mobile: 11119999}}

Смотрите оригинальную статью здесь: что такое Golang Types

Мнения, высказанные участниками Java Code Geeks, являются их собственными.