Hello, World!
Первая программа
Вот минимальная программа на Go:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}Всего 7 строк. Но каждая из них обязательна и несёт смысл. Кликни на любую строку в симуляторе выше — там подробное объяснение.
Запустить прямо сейчас
Анатомия программы
package main
Каждый .go файл начинается с объявления пакета. main — особый пакет: компилятор знает, что из него нужно создать исполняемый файл.
package main // исполняемый файл
package math // библиотека — нельзя запустить напрямую
package http // библиотекаimport "fmt"
Подключает стандартную библиотеку fmt (format). Без неё fmt.Println не существует.
Go не подключает ничего автоматически. И, в отличие от многих языков, запрещает импортировать то, что не используешь:
import "fmt" // используем fmt.Println — OK
import "os" // не используем — ОШИБКА КОМПИЛЯЦИИ
// "os" imported and not usedЭто дисциплина: в Go-коде нет мусорных импортов.
func main()
Точка входа. Go ищет именно эту функцию при запуске. Требования:
- имя строго
main(строчные) - пакет строго
main - нет аргументов
- нет возвращаемых значений
Аргументы командной строки — через os.Args, не через параметры функции.
fmt.Println("Hello, World!")
Вызов функции Println из пакета fmt. Выводит аргументы в stdout и добавляет \n.
fmt.Println("Hello") // Hello
fmt.Println("A", "B", "C") // A B C (пробелы между аргументами)
fmt.Println(42, true, 3.14) // 42 true 3.14go run vs go build
go run — для разработки
go run main.goКомпилирует и сразу запускает. Бинарник создаётся во временной папке и удаляется. Удобно для экспериментов.
go build — для production
go build -o hello main.go # создаёт бинарник ./hello
./hello # запускаемБинарник — самодостаточный. Не нужен Go, не нужны библиотеки. Скопировал на сервер — работает.
# Собрать для Linux с Mac/Windows:
GOOS=linux GOARCH=amd64 go build -o hello-linux main.go
# Собрать для Windows:
GOOS=windows go build -o hello.exe main.goЭто кросс-компиляция — одна из суперсил Go. Без виртуальных машин и контейнеров.
Частые ошибки
В следующем уроке разберём переменные — как Go хранит данные и почему нельзя объявить переменную и не использовать её.