пятница, 19 апреля 2019 г.

Спецификация Go: введение, нотация

В серии постов Спецификация Go будет последовательно представлена вся спецификация языка программирования Go.

Go - это язык общего назначения, разработанный с учетом системного программирования. Он строго типизирован и собирает мусор и имеет явную поддержку конкуррентного (concurrent) программирования. Программы построены из пакетов, свойства которых позволяют эффективно управлять зависимостями.

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

Нотация

Синтаксис определен с использованием Расширенной формы Бэкуса — Наура (расширенная Бэкус — Наурова форма (РБНФ)) (Extended Backus–Naur Form (EBNF)).

Production  = production_name "=" [ Expression ] "." .
Expression  = Alternative { "|" Alternative } .
Alternative = Term { Term } .
Term        = production_name | token [ "…" token ] | Group | Option | Repetition .
Group       = "(" Expression ")" .
Option      = "[" Expression "]" .
Repetition  = "{" Expression "}" .

Productions это выражения(expressions) сконструированные из терминов(terms) и следующих за ними операторов(operators), в восходящей последовательности:

|   чередование (alternation)
()  группировка (grouping)
[]  опция (option) (0 или 1 раз)
{}  повторение (repetition) (от 0 до n раз)

production имена (production_name) в нижнем регистре использоуются для определения лексических токенов (lexical tokens). Non-terminals (нетерминалы) используются в CamelCase. Лексические токены обернуты в двойные кавычки "" или в обратные кавычки ``.

Форма a … b представляет набор символов от a до b как чередования. Горизонтальный эллипсис … также используется в спецификации для неформального обозначения различных перечислений (enumerations) или отрезков кода, которые не уточняются. Символ … (как противоположность трем символам точек ...) не является токеном в языке Go.


Читайте также:


среда, 10 апреля 2019 г.

Запуск скриптов с помощью Go

Всем известно, что Go не скриптовый язык. Но при желании его можно использовать для выполнения скриптов как и любой из интерпретируемых языков как Python или PHP. Для этого можно воспользоваться командой go run myScript.go (для запуска скрипта myScript.go). Конечно при этом будет происходить компиляция и будет создан исполняемый бинарный файл, но после завершения программы он будет автоматически удален и не останется на жестком диске. Вот простой пример скрипта с названием myScript.go:

package main

import "fmt"

func main() {
 fmt.Println("Всем привет, это скрипт.")
 fmt.Println("Всем пока, программа завершена.")
}

Теперь запустим наш скрипт:

go run myScript.go

Всем привет, это скрипт.
Всем пока, программа завершена.

Проверим содержимое текущей папки:

ls

myScript.go

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


Читайте также: