Пару месяцев назад я начал писать на Go так же известным, как Golang. И не только из-за их потрясающего логотипа. Основная причина была в том, что я хотел, чистую железяку на моем Raspberry Pi, а так же кроссплатформенность в паре с легкостью установки. Среди других причин были простота создания на Go асинхронного кода с помощью Go методов и уникальный подход к синхронизации каналов между подпрограммами (потоками) посредствам go routines.
С тех пор, как GO был выпущен в 2012 году, я много читал о нем и что ж, пришло время по-настоящему замарать руки и попробовать использовать его для своих задач.
Однако любопытно, продолжим .
Что же из себя представляет GO?
Go — это опен сорсный язык программирования , который позволяет легко создавать простое, надежное и эффективное программное обеспечение. Разрабатывался он внутри компании Google и на 2018 год уже являлся одним из самых быстроразвивающихся и адаптированных языков программирования. Первый релиз языка появился в марте 2012 года. А не так давно, начиная с выпуска Go 1.11, у него появилась поддержка модулей и управлять зависимостями стало немного удобнее.
Обзор программы Just Go — Просто Го
Необходимые настройки среды
Для начала нужно все правильно настроить. Есть простой способ установить мою библиотеку с помощью Chocolatey.
В Windows мы используем Chocolatey в Powershell для установки Go и vscode…
Windows Powershell as administrator cinst -y go vscode
С установленным Go и vscode у нас есть все, что нужно для начала.
Так как я использую Git bash на все случаи жизни, я запускаю следующую команду Visual Studio Code из Git Bash, чтобы установить go расширение. Если хотите, вы можете просто установить расширение из самого vscode.
Windows Git Bash code —install-extension ms-vscode.go
Вот мы и поставили Go расширение в visualstudio, так что теперь у нас есть все для приятного кодинга.
Где найти отличные ресурсы и материалы по GO?
Документацию по Go можно найти здесь. Все пакеты, доступные для использования, можно найти здесь.Кроме того, для того, чтобы заюзать Go или помочь другим программистам с примерами у языка есть онлайн-площадка.
Создаем первый проект
Для того, чтобы начать на Go новый проект, мы сначала создаем пустую папку. Затем мы прописываем в этой папке команду go modules init, чтобы инициализировать модули Go. Модули используются для зависимостей.
mkdir hello-world cd hello-world go mod init github.com/marcofranssen/hello-world
Синтаксис
В Go мы определяем функцию, используя ключевое слово func.
func main() < // our code >
То, что других языках обычно бывает классом, в Go является структурой struct. Вы можете определить структуру следующим образом.
type Envelope struct
Все переменные, функции, структуры, которые начинаются с верхнего регистра в Go являются публичными. А все переменные, функции, структуры, начинающиеся со строчной буквы, являются частными. Кроме того, как вы наверное уже заметили в примере, определения типов идут за именем переменной. Поместив оператор импорта поверх файла вы можете импортировать все необходимые пакеты. И последнее, но не менее важное: каждая программа go должна иметь хотя бы один main пакет.
Евгений Коган. Ответы на ваши вопросы
package main import «fmt» func SayHi(person string) string < //public function return fmt.Sprintf(«Hi %s», person) >func sayHi(person string) string < //private function return fmt.Sprintf(«Hi %s», person) >
Этот пакет fmt предоставляет нам несколько полезных функций, например строки шаблонов, которые удобно использовать для построения строки с использованием некоторых переменных.. Более того, в примере мы видим, что возвращаемый тип для функции упоминается в конце ее определения. Более подробно читайте о пакете fmt в документации.
Вперед, в бой!
Теперь у нас есть пустой проект, и к тому же мы уже немного знаем о синтаксисе, чтож, начнем! Открываем эту папку в vscode.
code .
Сначала мы добавляем новый файл в нашу папку, называем ее main.go . Затем добавим тот код, который мы рассмотрели выше.
package main import «fmt» func main() < fmt.Println(sayHi(«Marco»)) >func sayHi(person string) string
Теперь с помощью этого кода мы можем запустить наше приложение. Используя следующую команду в командной строке.
go run main.go
Можете также прогнать этот код в Go playground.
Тестирование
Чтобы добавить тесты в go, просто добавьте файл main_test.go. Добавим функцию проверяющую метод sayHi. Сигнатура методов тестирования всегда ДОЛЖНА быть TestXxx(t *testing.T). Первый X всегда должен быть в верхнем регистре.
package main import «testing» func TestSayHi(t *testing.T) < expected := «Hi Marco» greeting := sayHi(«Marco») if greeting != expected < t.Errorf(«Greeting was incorrect, got: ‘%s’, want: ‘%s'», greeting, expected) >>
Вы наверняка заметили что то новое в этом коде. Мы используем сокращение для присвоения значений переменной: =. Если функция sayHi не возвращает ожидаемое нами значение, мы выдадим ошибку с хорошим понятным сообщением.
Теперь, чтобы запустить наш тест, мы сделаем в командной строке следующее. Обратите внимание, что я запускаю все тесты из всех файлов и подпапок в моем проекте таким способом ./.
go test ./.
Пожалуйста, не бойтесь пробовать, изменяйте реализацию, и снова запустите тест, чтобы увидеть, как тесты пройдут неудачно. Для запуска с code coverage запустите такие тесты.
go test -coverage -coverprofile=coverage.out ./. go tool cover -html=coverage.out -o coverage.html
Чтобы подробнее ознакомится, пожалуйста, читайте документацию о testing package.
Компилируем и выполняем
Самым простым способом создать исполняемый файл будет:
go build . ./hello-world.exe
Это команда создаст нам исполняемый файл Windows, как будто мы на Windows. Вы можете просто вызвать исполняемый файл и увидеть тот же результат, что мы имели при вызове go run main.go. Если мы хотим получить более подробный вывод и посмотреть, что происходит за под капотом, можно использовать -x опцию -в go build. А как нам скомпилировать один и тот же код для Linux или Raspberry Pi?
GOOS=linux GOARCH=amd64 go build .
Чтобы запустить этот бинарник в Linux, не забудьте использовать chmod +x, а затем просто вызвать с помощью ./hello-world
Raspberry Pi 3 имеет архитектуру ARM v7, которую можно скомпилировать следующим образом. ПРИМЕЧАНИЕ: все это мы можем сделать с Windows.
GOOD=linux GOARCH=arm GOARM=7 go build .
Для запуска бинарника сделайте все то же самое, что и на любом другом компьютере с Linux chmod +x, а затем ./hello-world для запуска вашего приложения.
Резюмируя
Я знаю, что это очень простое приложение и оно не несет практической пользы, но, по крайней мере, вы уже, как минимум, настроили свою среду разработки и приобрели небольшой практический опыт в написании первых строк кода на Go. Вы уже также знаете, как писать тесты. Это будет хорошей основой для написания качественного кода. Более интересные вещи, такие как go routines, я хотел бы оставить для нового поста в блоге.
И последнее, но не менее важное: я хотел бы поделиться с вами своим первым приложением на Go. Это интеграция с термостатом Nest, который я запускаю на своем Raspberry Pi, чтобы собрать данные о температуре и отобразить их в хорошем веб-приложении на React. Только не забудьте зарегистрироваться в рабочем пространстве Gophers Slack.
Источник: dev-gang.ru
Что за программа гоу
Создадим первую программу на языке Go. Для написания кода нам потребуется какой-нибудь текстовый редактор. Можно взять любой редактор, например, встроенный блокнот или популярный Notepad++ или любой другой. Для трансляции исходного кода в приложение необходим компилятор.
Создание программы
Определим на жестком диске папку для хранения файлов с исходным кодом. Допустим, в моем случае это будет папка C:golang . В этой папке создадим новый текстовый файл, который переименуем в hello.go .
Откроем этот файл в любом текстовом редакторе и определим в нем следующий код:
package main import «fmt» func main()
Что в этой программе делается? Программа на языке Go определяется в виде пакетов. Программный код должен быть определен в каком-то определенном пакете. Поэтому в самом начале файла с помощью оператора package указывается, к какому пакету будет принадлежать файл. В данном случае это пакет main:
package main
Причем пакет должен называться именно main, так как именно данный пакет определяет исполняемый файл.
При составлении программного кода нам может потребоваться функционал из других пакетов. В Go есть множество встроенных пакетов, которые содержат код, выполняющий определенные действия. Например, в нашей программе мы будем выводить сообщение на консоль. И для этого нам нужна функция Println , которая определена в пакете fmt . Поэтому второй строкой с помощью директивы import мы подключаем этот пакет:
import «fmt»
Далее идет функция main. Это главная функция любой программы на Go. По сути все, что выполняется в программе, выполняется именно функции main.
Определение функции начинается со слова func , после которого следует название функции, то есть main. После названия функции в скобках идет перечисление параметров. Так как функция main не принимает никаких параметров, то в данном случае указываются пустые скобки.
Затем в фигурных скобках определяется тело функции main — те действия, которые собственно и выполняет функция.
func main()
В нашем случае функция выводит на консоль строку «Hello Go!». Для этого применяется функция Println() , которая определена в пакете fmt. Поэтому при вызове функции вначале указывается имя пакета и через точку имя функции. А в скобках функции передается то сообщение, которое она должна выводить на консоль:
fmt.Println(«Hello Go!»)
Компиляция и выполнение программы
Теперь скомпилируем и выполним данную программу. Для этого необходимо передать файл с исходным кодом компилятору go.exe и указать нужную команду. Для этого откроем командную строку(терминал) и перейдем в ней с помощью команды cd к папке, где храниться файл с исходным кодом hello.go (в моем случае это папка C:golang ):
cd C:golang
Затем выполним программу с помощью следующей команды:
go run hello.go
go — это компилятор. Поскольку при установке путь к компилятору автоматически прописывается в переменную PATH в переменных окружения, то нам не надо указывать полный путь C:Gobingo.exe , а достаточно написать просто имя приложения go. Далее идет параметр run , который говорит, что мы просто хотим выполнить программу. И в конце указывается собственно файл программы hello.go.
В итоге после выполнения на консоль будет выведено сообщение «Hello Go!».
Данная команды выполняет, но не компилирует программу в отдельный исполняемый файл. Для компиляции выполним другую команду:
go build hello.go
После выполнения этой команды в папке с исходным файлом появится еще один файл, который будет называться hello.exe и который мы можем запускать. После этого опять же мы можем выполнить программу, запустив в консоли этот файл:
Источник: metanit.com
Что такое Go? Go Playground, пакеты, функции и скобки в Golang
Go является компилируемым языком программирования. Перед запуском программы используется компилятор, что трансформирует ваш код в нули и единицы, понятные для компьютера. Весь текст кода компилируется в один исполняемый файл, который в дальнейшем можно запускать или передавать другим пользователям. По ходу процесса компилятор Go фиксирует опечатки и ошибки.
Не все языки программирования задействуют данный подход. Python, Ruby и некоторые другие популярные языки используют интерпретатор для перевода одного оператора за раз по ходу выполнения программы. Это значит, что в непротестированных частях программы могут остаться баги.
Премиум канал по Golang
Рекомендуем вам супер TELEGRAM канал по Golang где собраны все материалы для качественного изучения языка. Удивите всех своими знаниями на собеседовании!
Уроки, статьи и Видео