- •Лабораторная работа 1 Язык Go. Введение. Объявление констант и переменных. Логические значения и числовые типы данных
- •Задание 1.1 Выведем на экран строку «Моя first программа на Go».
- •Задание 1.2 Написать программу, которая выводит сообщение вида «Иван изучает язык Go» (имя и название языка это аргументы командной строки, переданные программе при выполнении).
- •Задание 1.3 Нужно вывести сообщения вида «ИмяN изучает языкN». Пусть в командной строке задается 2n атрибутов в формате «имя файла имя1 язык1 имя2 язык2 ...»
- •Задание 1.4 Реализуйте вышеописанный пример, используйте различные варианты присваивания значений переменной X (латинские и русские символы).
- •Задание 1.8 Выполните проверку этого задания.
Задание 1.2 Написать программу, которая выводит сообщение вида «Иван изучает язык Go» (имя и название языка это аргументы командной строки, переданные программе при выполнении).
Выполните следующие действия:
1 Создайте каталог args.
2 В Блокноте наберите следующие строки кода (рисунок 1.5). Сохраните с именем args.go.
3 Откомпилируйте программу и выполните ее со следующими аргументами (рисунок 1.6).
Рисунок 1.5 Листинг программы args.go
Рисунок 1.6 Результат компиляции и выполнения программы
Поясним код программы args.go:
пакет os содержит значения и функции для работы с операционной системой платформо-независимым образом. Переменная с именем Args, которая является частью пакета os, содержит аргументы командной строки (ее имя за пределами пакета os os.Args);
переменная os.Args срез (slice) строк (фундаментальное понятие в Go) последовательность (динамического размера) s элементов массива, в которой к отдельным элементам можно обратиться как s[i]. Первый элемент os.Args [0] это имя самой команды; остальные элементы представляют собой аргументы, которые были переданы программе, когда началось ее выполнение;
количество элементов среза определяется как len (s);
оператор := в терминологии языка Go называется сокращенным объявлением переменной одновременно объявление и инициализация переменной, компилятор Go автоматически определит тип переменной по присваиваемому значению. В примере, объявляются переменные who и lang типа string, далее переменным могут присваиваться только строковые значения;
инструкция if проверяет условие, в данном случае – количество аргументов командной строки, и если оно удовлетворяется, выполняет соответствующий блок программного кода, заключенный в фигурные скобки;
оператор присваивания =. Переменной who будет присвоено значение первого аргумента командной строки, если количество аргументов более 1 (т.е. кроме названия программы есть хотя бы один аргумент). Использовать оператор := нельзя, т.к. в этом случае будет объявлена и инициализирована новая переменная who, область видимости которой будет ограничена телом инструкции if.
Задание 1.3 Нужно вывести сообщения вида «ИмяN изучает языкN». Пусть в командной строке задается 2n атрибутов в формате «имя файла имя1 язык1 имя2 язык2 ...»
В программу args.go следует внести изменения (рисунок 1.7) и сохранить с именем argsN.go в папке argsN.
Рисунок
1.7
Листинг программы argsN.go
Результат работы программы представлен на рисунке 1.8:
Рисунок
1.8
Результат работы программы
Приведем некоторые пояснения:
объявление var объявляет две переменные who и lang типа string. Если переменная не инициализирована явно, она неявно инициализируется нулевым значением соответствующего типа (пустая строка для строк). В примере объявление неявно инициализирует строки who и lang;
оператор += является присваивающим оператором;
цикл for является единственной инструкцией цикла в Go. Вокруг трех компонентов цикла for скобки не используются. Фигурные же скобки обязательны, причем открывающая фигурная скобка обязана находиться в той же строке, что и инструкция последействие. Цикл имеет ряд разновидностей, одна из которых показана в примере:
for инициализация; условие; последействие {
// нуль или несколько инструкций
}
индексная переменная цикла i объявлена в первой части цикла for и инициализирована значением 1;
условие это логическое выражение, которое вычисляется в начале каждой итерации цикла. Если его вычисление дает истинный результат, то выполняются инструкции тела цикла, иначе цикл завершается.
Познакомимся со структурой программы на языке Go. Остановимся на понятии «идентификатора».
Имена переменных, констант, типов, функций и пакетов в Go подчиняются правилу: имя начинается с буквы (т.е. со всего, что Unicode считает буквой) или с подчеркивания и может иметь сколько угодно дополнительных букв, цифр и подчеркиваний. Имена чувствительны к регистру (S и s являются разными именами)! Длина имени не ограничивается.
Идентификаторами в языке Go могут быть непустые последовательности букв и цифр, начинающиеся с буквы и не совпадающие с ключевыми словами. В таблице 1.1 перечислены 25 ключевых слов, которые не могут использоваться в качестве идентификаторов.
Таблица 1.1 Ключевые слова в языке Go
break |
case |
chan |
const |
continue |
default |
defer |
else |
fallthrough |
for |
func |
go |
goto |
if |
import |
interface |
map |
package |
range |
return |
select |
struct |
switch |
type |
var |
Если сущность объявлена внутри функции, она является локальной для данной функции. Если сущность объявлена вне функции, она видна во всех файлах пакета, к которому она принадлежит. Регистр первой буквы имени определяет его видимость через границы пакета. Идентификаторы, начинающиеся с буквы в верхнем регистре считаются общедоступными, или экспортируемыми, остальные – частными, или неэкспортируемыми (правило не применяется к именам пакетов, которые в соответствии с соглашениями состоят только из букв в нижнем регистре).
При формировании имен путем сочетания слов используются соединения слов, начинающихся с прописных букв (например, стандартные библиотеки имеют функции с такими именами, как QuoteRuneToASCII или parseRequestLine). Буквы сокращений наподобие ASCII и HTML всегда отображаются в одном и том же регистре, поэтому функция может быть названа htmlEscape, HTMLEscape или escapeHTML, но не escapeHtml.
Пустой идентификатор «_» это временный идентификатор в операциях присваивания, где ожидается переменная, используется для сбрасывания любых присваиваемых ему значений. Пустой идентификатор не считается новой переменной, поэтому при использовании вместе с оператором «:=» слева должна быть указана хотя бы одна другая (новая) переменная. Допускается отбрасывать некоторые или все значения, возвращаемые функцией, присваивая их пустому идентификатору. Однако, если программе не нужно ни одно из возвращаемых значений, можно просто их игнорировать. Например:
count, err = fmt.Println(x) // получить число напечатанных байтов и ошибку
count, _ = fmt.Println(x) // получить число напечатанных байтов; отбросить ошибку
_, err = fmt.Println(x) // отбросить число напечатанных байтов; получить ошибку
fmt.Println(x) // игнорировать все возвращаемые значения
