Теперь нам пора начать копаться в языке Go и вкратце рассказать об используемых примитивных типах данных. Мы собираемся разделить это обсуждение на три части.

  1. Объявление переменной и доступные примитивные типы данных в Go
  2. Указатель и особенности указателей в Go
  3. Константы и чем они отличаются от других языков.

Если вы из любого другого языка программирования, каждый из них будет отличаться от того, что вы знаете. Давайте посмотрим на них подробно и попытаемся понять эти особенности.

Объявление переменной:

В отличие от большинства языков Go имеет различные варианты объявления переменных.

Чтобы объявить переменную в Go, мы указываем ключевое слово var, за которым следует имя переменной с типом данных переменной. Важно напомнить вам, что Go - это язык со статической типизацией.

//classic variable declaration
var age int
age = 35

Если вы из любого другого языка со статической типизацией, это может показаться знакомым большинству из нас, поскольку мы можем использовать что-то в этом роде очень регулярно. Однако такого рода декларации довольно многословны, и многие церемонии проводятся только для декларации.

Мы можем сжать объявление и присвоение тому же оператору, что и ниже, что также совершенно верно.

var age int = 35

Но все же декларация многословна.

В большинстве случаев мы просто хотим объявить переменную и инициализировать ее. Нам не нужна церемония ввода ключевого слова var и типов данных. Это мы делаем ту работу, которую компилятор должен делать за нас в большинстве случаев.

Go решает эту проблему и для нас. Вместо того, чтобы начинать объявление с var, мы начинаем с имени переменной, за которым следует знак : рядом с =.

age := 35

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

Здесь следует отметить еще одну дополнительную вещь, в отличие от любого другого языка программирования: вы объявляете переменную и не используете ее в коде. Go выдаст ошибку времени компиляции declared not used. Это вспомогательная вещь, поэтому, если у вас есть тип данных переменной, инициализированный локально , то вам нужно использовать эту переменную.

Указатели и их особенности:

Существует еще один тип данных под названием Указатель. Типы данных, которые мы видели раньше, являются типами значений. Итак, когда вы объявляете переменную i, присваивая значение 4, переменная указывает на место в памяти, которое содержит значение 4.

Указатель, как вы, возможно, уже знаете, вместо того, чтобы хранить фактическое значение в переменной, он содержит адрес ячейки памяти, в которой хранится значение. Объявление, если переменная-указатель немного уникальна.

var firstName *string
firstName = "dan"

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

Разыменование: разыменование указателя дает нам доступ к значению, на которое указывает указатель.

var firstName *string
firstName = "dan"
fmt.Println(firstName) // this prints 0x40e020
fmt.Println(*firstName) // this prints dan

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

Константы

Во многих отношениях константы работают так же, как переменные в Go. Единственная разница в том, что мы не можем изменить значение после его инициализации.

const pi = 3.14
const pi float32= 3.14

Константа не может изменить свое значение, поэтому вы не можете объявить константу, а затем инициализировать ее позже. Еще нам нужно отметить, что тип данных константы должен быть доступен во время компиляции. Таким образом, вы не можете присвоить значение, возвращаемое функцией, константе, потому что функции оцениваются только во время выполнения.

package main
import(
 "fmt"
)
func main(){
  const c = 6
  fmt.Println(c + 3) //Prints 9
  fmt.Println(c + 1.3) //Prints 7.3
}

В приведенном выше фрагменте кода мы не указали тип данных const c, поэтому в первом Println const c оценивается как целое число, тогда как в следующей строке он интерпретируется как тип с плавающей запятой. Это так называемая неявно типизированная константа. Компилятор будет интерпретировать тип соответствующим образом каждый раз, когда сталкивается с ним.

Заключение

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

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

Далее реализация типа сбора данных в Go.