Tutorial

Создание вашей первой программы на Go

GoDevelopment

Введение

“Hello, World!” — это классическая программа, традиционно используемая в компьютерном программировании. Это простая и полноценная первая программа для начинающих, и с ее помощью легко определить, что среда настроена правильно.

В этом обучающем руководстве мы подробно рассмотрим создание этой программы на языке Go. Чтобы сделать программу поинтереснее, мы изменим традиционную программу “Hello, World!” так, чтобы она запрашивала имя пользователя. Затем это имя можно будет использовать в приветствии. После завершения этого обучающего модуля у вас будет программа, которая будет выглядеть при запуске следующим образом:

Output
Please enter your name. Sammy Hello, Sammy! I'm Go!

Предварительные требования

Для начала прохождения этого обучающего модуля на вашем компьютере должна быть настроена локальная среда разработки Go. Вы можете настроить ее, следуя указаниям одного из следующих обучающих руководств:

Шаг 1 — Написание простой программы “Hello, World!”

Чтобы написать программу “Hello, World!”, откройте nano или другой текстовый редактор командной строки и создайте новый файл:

  • nano hello.go

Когда текстовый файл откроется в окне терминала, мы напишем нашу программу:

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

После написания программы “Hello, World!” вы можете ее запустить. Для этого используется команда go, после которой идет имя только что созданного файла.

  • go run hello.go

Программа будет исполнена и выведет на экран следующее:

Output
Hello, World!

Посмотрим, что фактически произошло.

Перед запуском программы Go требуют компиляции. При вызове go run с именем файла, в данном случае hello.go, команда go компилирует приложение и запускает полученный двоичный файл. Если программа написана на компилируемом языке программирования, компилятор берет исходный код программы и генерирует другой тип кода низкого уровня (например, машинный код) для получения исполняемой программы.

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

После компиляции код запускается посредством входа в функцию main() в пакете main. Программа выполняет строку fmt.Println("Hello, World!") , вызывая функцию fmt.Println. Значение строки Hello, World! передается функции. В этом примере строка Hello, World! также называется аргументом, поскольку это значение, которое передается методу.

Кавычки, в которые заключена фраза Hello, World!, не выводятся на экране, поскольку они показывают Go, где начинается и кончается ваша строка.

На этом шаге вы создали работающую программу “Hello, World!” с помощью Go. На следующем шаге мы покажем, как сделать программу более интерактивной.

Шаг 3 — Запрос ввода пользователя

При каждом запуске программа дает один и тот же результат. На этом шаге вы добавите в программу запрос имени пользователя. Затем это имя можно будет использовать в выводимых результатах.

Вместо изменения существующей программы создайте новую программу greeting.go с помощью редактора nano:

  • nano greeting.go

Вначале добавьте этот код, который предлагает пользователю ввести имя:

greeting.go
package main

import (
    "fmt"
)

func main() {
  fmt.Println("Please enter your name.")
}

Затем используйте функцию fmt.Println для вывода текста на экран.

Затем добавьте выделенную строку для сохранения введенных пользователем данных:

greeting.go
package main

import (
    "fmt"
)

func main() {
  fmt.Println("Please enter your name.")
  var name string
}

Строка var name string создаст новую переменную с помощью ключевого слова var. Мы присваиваем этой переменной имя name, и она имеет тип string.

Затем добавьте выделенную строку для записи вводимых пользователем данных:

greeting.go
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 хранит эту строку в памяти компьютера до завершения выполнения программы.

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

greeting.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, нажав CTRL + X. Нажмите Y, когда вам будет предложено сохранить файл.

Запустите программу. Вам будет предложено ввести имя, так что введите его и нажмите ENTER. Результат может немного не соответствовать ожиданиям:

Output
Please enter your name. Sammy Hi, Sammy ! I'm Go!

Вместо Hi, Sammy! I'm Go! после имени выводится разрыв строки.

Программа зарегистрировала все нажатия клавиш, включая клавишу ENTER, которую мы нажимаем, чтобы программа продолжила выполнение. При нажати клавиши ENTER создается специальный символ, которы создает новую строку. Программа делает именно то, что ей предписывается, то есть отображает введенный текст, включая символ новой строки. Это не то, чего вы ожидаете от вывода, но вы можете исправить проблему с помощью дополнительных функций.

Откройте файл greeting.go в редакторе:

  • nano greeting.go

Найдите в программе следующую строчку:

greeting.go
...
fmt.Scanln(&name)
...

Добавьте после нее следующую строчку:

greeting.go
name = strings.TrimSpace(name)

Она использует функцию TrimSpace из стандартной библиотеки Go strings в строке, которую вы записали с помощью fmt.Scanln. Функция strings.TrimSpace удаляет символы пробела, в том числе символы новой строки в начале и конце строки. В данном случае будет удален символ новой строки в конце строки, созданный при нажатии клавиши ENTER.

Чтобы использовать пакет strings, его нужно импортировать в программу.

Найдите в программе следующие строки:

greeting.go
import (
    "fmt"
)

Добавьте следующую строку для импорта пакета strings:

greeting.go
import (
    "fmt"
  "strings"
)

Теперь программа будет содержать следующее:

greeting.go
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)
}

Сохраните и закройте nano. Нажмите CTRL + X, а затем нажмите Y, когда вам будет предложено сохранить файл.

Запустите программу снова:

  • go run greeting.go

Теперь после ввода имени и нажатия клавиши ENTER выводится ожидаемый результат:

Output
Please enter your name. Sammy Hi, Sammy! I'm Go!

Теперь у вас имеется программа Go, которая принимает данные пользователя и выводит их на экран.

Заключение

В этом обучающем руководстве мы написали программу “Hello, World!”, которая принимает вводимые пользователем данные, обрабатывает результаты и выводит их на экран. Теперь у вас имеется базовая программа для работы, и вы можете попробовать дополнить и расширить ее. Например, вы можете спросить любимый цвет пользователя и сделать так, чтобы программа говорила, что его любимый цвет красный. Вы даже можете использовать эту же методику для создания простой программы Mad-Lib.

Creative Commons License