Вывод на экран
Почти каждая программа что-то сообщает: результат расчёта, номер заказа, что пошло не так. Сегодня — две функции из пакета 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 печатает только перевод строки. Так делают отступы между частями вывода.
Print — без перевода строки
Ситуация. Кусочки одной строки получаются в разных местах программы, а напечатать их надо подряд.
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.txt2. Создайте файл: в 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