Индикатор cht value chart описание

Язык Go является компилируемым в нативный код языком со сборкой мусора и
встроенной многопоточностью. Основная ниша языка — системное

программирование.

Язык не поддерживает пространств имен, но поддерживает
пакетную структуру.

eToro - Popular Investor

Язык не поддерживает исключений.

Особенности синтаксиса

Язык имеет C-подобный синтаксис. Однострочные и многострочные комментарии
такие же как в C. Нет каких-либо Javadoc или Doxygen-комментариев — любой
комментарий, который предшествует публичной сущности (имени пакета, имени

типа, имени функции), будет использован для генерации документации.

Особенности именования сущностей

Имена пакетов

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

директивы import:

import “bytes” // Такое имя ищется в стандартных путях поиска пакетов.
import “./bytesops” // Такое имя ищется в определенных программистом путях.

Несколько директив import могут быть объеденены в одну:

import ( “bytes” “io/sockets” “io/sharedmemory/fast”
)

При обращении к содержимому пакета нужно указывать имя пакета. Например:

fmt.Fprintf(…)
a := io.Open( … )

Имена сущностей внутри пакетов

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

пакета):

// Первый пакет.
package bytesops type Buffer []byte func New() Buffer { … } // Второй пакет.
package main import “bytesops” func sample() { var b bytesops.Buffer = bytesops.New() …
}

Точки с запятой

Точки с запятой используются гораздо реже, чем в C. Они нужны только как
разделители предложений (statement-ов) языка. В некоторых случаях точки с
запятой можно не указывать:

func CopyInBackground(dst, src chan Item) { go func() { for { dst 0 { return y
}

Конструкция if может принимать не только условие, но и инициализатор:

if err := file.Chmod(0664); err != nil { log.Stderr(err); return err;
}

For

Цикл for имеет три формы:

// Как for в C
for init; condition; post { } // Как while в C
for condition { } // Как бесконечный цикл (for(;;) или while(1)) в C
for { }

Например:

sum := 0;
for i := 0; i < 10; i++ { sum += i
}

При проходе по контейнеру можно использовать конструкцию range:

var m map[string]int;
sum := 0;
for _, value := range m { // Ключ из map-а игнорируется. sum += value
}

В языке Go инкремент является предложением (statement), а не выражением
(expression). Т.е. нельзя записать a=i++. Поэтому, если нужно в цикле
инкрементировать сразу несколько переменных, то делать это нужно параллельным

присваиванием (вида a,b=c,d):

// Обращение содержимого a
for i, j := 0, len(a)-1; i < j; i, j = i+1, j-1 { a[i], a[j] = a[j], a[i]
}

Switch

Конструкция switch в языке Go, не смотря на синтаксическое сходство со switch
из C, сильно отличается. Вычисление вариантов case идет сверху вниз. Поэтому

метками в case могут быть не только константы, но и условия. Поэтому switch в

Go может использоваться вместо серии if-else-if-else:

func unhex(c byte) byte { switch { case '0'