Как написать свою первую программу на Go

Вступление

Программа «Здравствуй, мир!» - это классическая и проверенная временем традиция в компьютерном программировании. Это простая и полная первая программа для начинающих, и это хороший способ убедиться, что ваша среда правильно настроена.

Из этого туториала вы узнаете, как создать эту программу на Go. Однако, чтобы сделать программу более интересной, вы измените традиционную программу «Hello, World!» Так, чтобы она спрашивала у пользователя его имя. Затем вы будете использовать имя в приветствии. Когда вы закончите работу с учебником, у вас будет программа, которая выглядит следующим образом:

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

Предпосылки

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

[[шаг-1 -—- writing-the-basic- «hello-world -» - программа]] == Шаг 1 - Написание основного «Hello, World!» Программа

Написать «Привет, мир!» программу, откройте текстовый редактор командной строки, напримерnano, и создайте новый файл:

nano hello.go

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

hello.go

package main

import "fmt"

func main() {
  fmt.Println("Hello, World!")
}

Давайте разберем различные компоненты кода.

package - это Gokeyword, который определяет, к какому пакету кода принадлежит этот файл. В папке может быть только один пакет, и каждый файл.go должен декларировать одно и то же имя пакета в верхней части своего файла. В этом примере код принадлежит пакетуmain.

import - это Gokeyword, который сообщает компилятору Go, какие другие пакеты вы хотите использовать в этом файле. Здесь вы импортируете пакетfmt, который поставляется со стандартной библиотекой. Пакетfmt предоставляет функции форматирования и печати, которые могут быть полезны при разработке.

fmt.Println - это Gofunction, находящийся в пакетеfmt, который сообщает компьютеру напечатать текст на экране.

После функцииfmt.Println вы вводите последовательность символов, например"Hello, World!", заключенную в кавычки. Любые символы, заключенные в кавычки, называютсяstring. Функцияfmt.Println выведет эту строку на экран при запуске программы.

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

Теперь вы можете попробовать свою программу.

[[step-2 -—- running-a-go-program]] == Шаг 2. Запуск программы Go

С вашей написанной программой «Hello, World!» Вы готовы запустить программу. Вы будете использовать командуgo, за которой следует имя только что созданного файла.

go run hello.go

Программа выполнит и отобразит этот вывод:

OutputHello, World!

Давайте рассмотрим, что на самом деле произошло.

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

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

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

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

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

[[step-3 -—- prompting-for-user-input]] == Шаг 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 создаст новую переменную, используяvarkeyword. Вы называете переменнуюname, и она будет иметь типstring.

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

greeting.go

package main

import (
    "fmt"
)

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

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

Вы хотите использовать эти символы в выводе вашей программы, поэтому вы сохраняете эти символыwriting в строкеvariable, называемой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 принимает строку и, используя специальную печатьverbs, (%s), вставляет значениеname в строку. Вы делаете это потому, что Go не поддерживаетstring interpolation, что позволяет вам взять значение, присвоенное переменной, и поместить его внутри строки.

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

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

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

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

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

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

nano greeting.go

Найдите эту строку в вашей программе:

greeting.go

...
fmt.Scanln(&name)
...

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

greeting.go

name = strings.TrimSpace(name)

Здесь используется функцияTrimSpace из пакета стандартной библиотеки Gostrings для строки, захваченной с помощью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, вы получите ожидаемый результат:

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

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

Заключение

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