День 01 · Программа, терминал, первый запуск · страница 5 из 6

Вывод на экран

Почти каждая программа что-то сообщает: результат расчёта, номер заказа, что пошло не так. Сегодня — две функции из пакета fmt, которых хватает на первые недели: Println и Print.


Println с несколькими значениями

Ситуация. Надо напечатать подпись и число: «Товаров: 7».

Код для чтения · разбираем, набирать не нужно
fmt.Println("Товаров:", 7)
Вывод · это печатает программа, набирать не нужно
Товаров: 7

Как читать. В скобках два аргумента через запятую: строка "Товаров:" и число 7. Println печатает их по порядку и ставит между ними пробел, а в конце переводит строку. Поэтому в самой строке пробел после двоеточия не нужен — его добавит Println.

Аргументов может быть сколько угодно:

Код для чтения · разбираем, набирать не нужно
fmt.Println("Склад", "Север", 12)
Вывод · это печатает программа, набирать не нужно
Склад Север 12

Число пишется без кавычек. 7 — число, "7" — строка из одного символа. Сегодня разница видна только в одном: с числами можно считать.

Код для чтения · разбираем, набирать не нужно
fmt.Println(2+3, "2 + 3")
Вывод · это печатает программа, набирать не нужно
5 2 + 3

Первый аргумент — выражение: Go сначала посчитал 2+3, потом напечатал результат. Второй — строка: что в кавычках, то и печатается, считать никто не будет.


Пустой Println — пустая строка

Код для чтения · разбираем, набирать не нужно
fmt.Println("Заказ принят")
fmt.Println()
fmt.Println("Спасибо!")
Вывод · это печатает программа, набирать не нужно
Заказ принят

Спасибо!

Без аргументов Println печатает только перевод строки. Так делают отступы между частями вывода.


Ситуация. Кусочки одной строки получаются в разных местах программы, а напечатать их надо подряд.

Код для чтения · разбираем, набирать не нужно
fmt.Print("Остаток:")
fmt.Print(15)
fmt.Print(" шт.\n")
Вывод · это печатает программа, набирать не нужно
Остаток:15 шт.

Как читать. Print не переводит строку в конце, поэтому следующий вывод продолжает ту же строку. И пробел между строкой и числом Print тоже не ставит — Остаток:15 склеилось. Отсюда главное отличие:

Println Print
перевод строки в конце ставит не ставит
пробел между аргументами ставит всегда ставит только между двумя не-строками

Второе правило запоминать не обязательно — достаточно знать, что Print склеивает, и проверять запуском. На практике Print используют редко, а Println — постоянно.


Спецсимволы внутри строки: \n и \"

\n в конце " шт.\n" выше — это не две буквы, а один символ перевода строки. Обратная косая черта \ в строке начинает специальную запись:

Запись Что печатается
\n перевод строки
\" двойная кавычка — без \ она закончила бы строку
\\ сама обратная косая черта
\t табуляция
Код для чтения · разбираем, набирать не нужно
fmt.Println("кавычка \"так\"", "перенос\nстроки")
Вывод · это печатает программа, набирать не нужно
кавычка "так" перенос
строки

Комментарии

Всё, что в строке после //, компилятор пропускает:

Код для чтения · разбираем, набирать не нужно
// Печатаем шапку чека.
fmt.Println("Склад «Север»") // название склада

Комментарий пишут для людей: зачем здесь этот код, что он должен делать. В заданиях курса условие часто стоит комментарием в начале файла.


Что может пойти не так

Что видите Что это значит Что делать
syntax error: unexpected literal 7 in argument list; possibly missing comma or ) между аргументами нет запятой: ("Товаров:" 7) поставить запятую
Товаров: 7 — два пробела пробел стоит и в строке, и его добавил Println убрать пробел в конце строки
unknown escape после \ стоит символ, который Go не знает, например \д в тексте нужна сама косая черта — писать \\
more than one character in rune literal строка в одинарных кавычках: 'Привет' в Go строки только в двойных кавычках
слова склеились Print вместо Println заменить или добавить пробел в строку

Попробуйте сейчас: что выведет?

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

1. Не запуская, предскажите вывод:

Код для чтения · разбираем, набирать не нужно
package main

import "fmt"

func main() {
	fmt.Print("Остаток:")
	fmt.Print(15)
	fmt.Println(" шт.")
	fmt.Println("Готово")
}

2. Отправьте первую строку вывода целиком:

▶ Выполните · выделенное замените своим
course answer day01.q2 ВАШ_ОТВЕТ

Вместо ВАШ_ОТВЕТ — первая строка вывода, как вы её предсказали.

Пробелы внутри ответа важны так же, как в выводе программы.

Готово, когда: course answer ответил Принято: day01.q2 = … (пункт проверки q2).


Попробуйте сейчас: напечатайте свой чек.

Цель: программа receipt печатает четыре строки вашего чека из TASK.txt.

Задание дня receipt — чек заказа. У каждого он свой.

1. Откройте условие:

▶ Выполните
cd ~/gocourse/day01/receipt
cat TASK.txt

2. Создайте файл: в VS Code щёлкните по папке receipt в Explorer и нажмите New File, имя — main.go. Запасной путь — code main.go из папки receipt, как на третьей странице.

3. Наберите в нём программу по этому образцу — четыре Println, по одному на строку чека:

Образец · набирать не нужно
package main

import "fmt"

func main() {
	fmt.Println("ПЕРВАЯ СТРОКА ИЗ TASK.txt")
	fmt.Println("ВТОРАЯ СТРОКА ИЗ TASK.txt")
	fmt.Println("ТРЕТЬЯ СТРОКА ИЗ TASK.txt")
	fmt.Println("ЧЕТВЁРТАЯ СТРОКА ИЗ TASK.txt")
}

Вместо заглавных заготовок — ваши четыре строки из TASK.txt, буква в букву, с кавычками-ёлочками и знаком №. Ёлочки и № проще скопировать прямо из TASK.txt: откройте его в VS Code рядом с main.go.

4. Сохраните Ctrl+S и запустите:

▶ Выполните
go run .

Сравните вывод с TASK.txt глазами — строка за строкой. Проверка сравнит так же, буква в букву.

Готово, когда: go run . печатает те же четыре строки, что в TASK.txt, буква в букву (пункт проверки receipt_out).


Дальше: когда программа не собирается — course next