Программа «Hello, World!» – это классическая, традиционная базовая программа. Как правило, это первая программа, которую пишут новички. А еще это хороший способ убедиться, что ваша среда правильно настроена.
Вы этом мануале вы узнаете, как создать такую программу в Go. Но чтобы сделать работу более интересной, мы предлагаем заменить традиционное «Hello, World!». Вместо этого мы научим программу спрашивать у пользователя его имя, а затем использовать его в приветствии. В результате у вас будет программа, которая работает так:
Please enter your name.
8host
Hello, 8host! I'm Go!
Требования
Для выполнения этого мануала вам понадобится рабочее пространство на вашем компьютере. В настройке такого пространства вам помогут эти мануалы:
- Установка Go и настройка локальной среды разработки в macOS
- Установка Go и настройка локальной среды разработки в Ubuntu 18.04
- Установка Go и настройка локальной среды разработки в Windows 10
1: Создание базовой программы «Hello, World!»
Чтобы написать традиционную программу «Hello, World!», откройте текстовый редактор и создайте новый файл:
nano hello.go
В файл вставьте такие строки:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
Давайте разберем код по компонентам.
package – это ключевое слово Go, которое определяет, какому пакету кода принадлежит этот файл. В одной папке может быть только один пакет, и каждый файл .go в самом начале должен объявлять одно и то же имя пакета. В этом примере код принадлежит пакету main.
import – это ключевое слово Go, которое сообщает компилятору Go, какие другие пакеты вы хотите использовать в этом файле. Здесь импортируется пакет fmt, который поставляется со стандартной библиотекой. Пакет fmt предоставляет функции форматирования и печати, которые могут быть полезны при разработке.
fmt.Println – это функция Go, находящаяся в пакете fmt, которая позволяет компьютеру отобразить некоторый текст на экране.
За функцией fmt.Println следует последовательность символов, – как, например «Hello, World!», – заключенная в кавычки. Любые символы внутри кавычек называются строкой. Функция fmt.Println выведет эту строку на экран при запуске программы.
Сохраните файл и выйдите из nano, набрав Ctrl+X, а когда будет предложено сохранить файл, нажмите Y.
Теперь вы можете попробовать запустить свою программу.
2: Запуск программы Go
Чтобы запустить свою новую программу, нужно использовать команду go, а затем указать имя файла, который вы только что создали.
go run hello.go
Программа выведет:
Hello, World!
Давайте посмотрим, что на самом деле произошло.
Программы Go перед запуском нужно компилировать. Когда вы вызываете go run с именем файла (в этом случае hello.go), команда go компилирует приложение и затем запускает получившийся двоичный файл. В программах, написанных на компилируемых языках программирования, это происходит так: компилятор возьмет исходный код программы и сгенерирует другой тип низкоуровневого кода (машинный код) для создания исполняемой программы.
Приложениям Go необходим основной пакет и ровно одна функция main(), которая служит точкой входа для приложения. Функция main не принимает аргументов и не возвращает значений. Она сообщает компилятору Go, что пакет должен быть скомпилирован как исполняемый.
После компиляции код выполняется путем ввода функции main() в основной пакет. Он выполняет строку fmt.Println(“Hello, World!”), вызывая функцию fmt.Println. Строковое значение Hello, World! затем передается в функцию. В этом примере строка Hello, World! также называется аргументом, поскольку это значение, которое передается методу.
Кавычки, которые находятся по обе стороны “Hello, World!” не выводятся на экран, потому что они не являются частью строки, а только сообщают Go, где начинается и заканчивается строка.
3: Пользовательские входные данные
Каждый раз, когда вы запускаете вашу программу, она выдает один и тот же результат. На этом этапе вы можете расширить ее функции – например, сделать так, чтобы она запрашивала у пользователя его имя. Затем можно использовать полученное имя в выходных данных.
Чтобы не менять существующую программу, создайте новую программу greeting.go с помощью nano:
nano greeting.go
Сначала добавьте этот код, который предлагает пользователю ввести свое имя:
package main
import (
"fmt"
)
func main() {
fmt.Println("Please enter your name.")
}
Как видите, функция fmt.Println используется и здесь для вывода текста на экран.
Теперь добавьте выделенный код, чтобы хранить пользовательский вывод:
package main
import (
"fmt"
)
func main() {
fmt.Println("Please enter your name.")
var name string
}
Строка var name string создает новую переменную с помощью ключевого слова var, переменная называется name и имеет тип string.
Затем добавьте следующую строку для захвата пользовательского ввода:
package main
import (
"fmt"
)
func main() {
fmt.Println("Please enter your name.")
var name string
fmt.Scanln(&name)
}
Метод fmt.Scanln ждет ввода с клавиатуры, который заканчивается символом новой строки (\ n). Это приостанавливает программу, позволяя пользователю вводить любой текст, который он хочет. Программа продолжит работу, когда пользователь нажмет клавишу Enter на своей клавиатуре. Все нажатия клавиш, включая нажатие клавиши Enter, затем фиксируются и преобразуются в строку символов.
Эти символы затем можно использовать в выходных данных вашей программы, поэтому их нужно сохранить (записав в строковую переменную name). Go сохраняет эту строку в памяти компьютера до тех пор, пока программа не завершит работу.
Добавьте следующую выделенную строку в программу, чтобы отобразить вывод:
package main
import (
"fmt"
)
func main() {
fmt.Println("Please enter your name.")
var name string
fmt.Scanln(&name)
fmt.Printf("Hi, %s! I'm Go!", name)
}
На этот раз вместо fmt.Println используется метод fmt.Printf. Функция fmt.Printf принимает строку и с помощью специальных операторов (%s) вставляет значение name в строку. Это делается потому, что Go не поддерживает интерполяцию строк, которая позволила бы взять значение, присвоенное переменной, и поместить его в строку.
Сохраните файл и выйдите из nano.
Теперь запустите программу. Вам будет предложено ввести ваше имя. Введите его и нажмите клавишу Enter. Вывод может выглядеть не совсем так, как вы ожидали:
Please enter your name.
8host
Hi, 8host
! I'm Go!
В выводе «Hi, 8host! I'm Go!» есть разрыв строки сразу после вашего имени.
Программа зафиксировала все нажатия клавиш, включая клавишу Enter, которую вы нажали, чтобы программа продолжила работать. В строках нажатие клавиши Enter создает специальный символ, который переходит на новую строку. Вывод программы делает именно то, что вы сказали: он отображает введенный вами текст, включая эту новую строку. Это не совсем то, что нужно, но это можно исправить с помощью дополнительных функций.
Откройте файл greeting.go в редакторе:
nano greeting.go
Найдите эту строку:
...
fmt.Scanln(&name)
...
Добавьте после нее такую строку:
name = strings.TrimSpace(name)
При этом для строки, захваченной с помощью fmt.Scanln, используется функция TrimSpace из пакета strings стандартной библиотеки Go. Функция strings.TrimSpace удаляет все пробелы, включая символы новой строки, в начале и конце строки. В этом случае она удаляет символ новой строки в конце строки, который был создан при нажатии клавиши Enter.
Чтобы использовать пакет strings, вам нужно импортировать его в начале программы.
Найдите эти строки:
import (
"fmt"
)
Добавьте такую строку:
import (
"fmt"
"strings"
)
Теперь код программы выглядит так:
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println("Please enter your name.")
var name string
fmt.Scanln(&name)
fmt.Printf("Hi, %s! I'm Go!", name)
name = strings.TrimSpace(name)
}
Сохраните и закройте файл.
Запустите программу:
go run greeting.go
В этот раз после нажатия Enter вы получите ожидаемый вывод:
Please enter your name.
8host
Hi, 8host! I'm Go!
Теперь у вас есть программа Go, которая принимает данные от пользователя и выводит их обратно на экран.
Заключение
В этом мануале вы написали простую программу «Hello, World!», которая принимает данные от пользователя, а затем обрабатывает и отображает результаты. Теперь, когда у вас есть базовая программа, попробуйте расширить ее. Например, она может запрашивать любимый цвет пользователя и называть в ответ свой любимый цвет. Вы можете даже попытаться использовать эту технику для создания простой программы Mad-Lib.