Go - это язык программирования общего назначения, основанный еще в 2009 году. В наши дни он является фаворитом для выполнения задач, связанных с веб-серверами, микросервисами, машинным обучением и т. Д. Вы можете ознакомиться с некоторыми компаниями, использующими Go, здесь.
В этой статье основное внимание уделяется настройке Visual Studio Code (VSCode) в качестве IDE для Go. Конечно, существуют и другие альтернативы, такие как Vim (с плагином vim-go), Atom IDE (с пакетом go-plus), Goland от IntelliJ, и это лишь некоторые из них. Однако на данный момент VSCode - это надежная IDE для разработки Go с таким количеством функций и расширений, которые расширяют ее возможности.
Хорошо, так что давайте перейдем к этому.
Начальная настройка
Первое, что нужно сделать, это запустить VSCode, а затем установить плагин ms-vscode.go. Этот плагин можно установить, выполнив поиск в Marketplace (Ctrl (или Cmd) + Shift + X), или вы можете пойти вправо. вперед и откройте свой рабочий каталог, а затем создайте файл Go с расширением .go.
Если вы выбрали второй вариант, вы должны увидеть запрос на установку расширения ms-vscode.go. После подтверждения и завершения установки у вас должен быть богатый набор инструментов для программирования на Go.
В любом случае вам нужно будет перезапустить VSCode. Нажатие кнопки перезагрузить, как показано ниже, должно помочь.
Инструмент форматирования
По умолчанию goimports является инструментом форматирования по умолчанию для файлов .go в VSCode. Однако, если по какой-либо причине вам необходимо это изменить, вы можете сделать это, перейдя в Файл → Настройки → Настройки. Затем вам нужно нажать на три точки справа, чтобы настроить файл settings.json для текущего пользователя:
Как показано выше, вы затем можете выбрать между gofmt, goformat и goreturns, а затем при необходимости «получить» пакет.
Фрагменты
VSCode уже имеет фрагменты по умолчанию для большинства повторяющихся задач, которые вы выполняете с Go (базовый цикл for, цикл диапазона и т. Д.). Тем не менее, вы можете добавить свои собственные фрагменты или даже переопределить существующие. Для этого вам нужно перейти в Файл → Настройки → Пользовательские фрагменты. Затем вы изменяете файл go.json, показанный в раскрывающемся меню. Образец файла go.json после модификации будет выглядеть следующим образом:
{ ... "main boilerplate" : { "prefix": "package", "body": [ "package main\n", "func main() {", "\t$0", "}", ], "description": "Custom snippet for a Go main application" }, "http handlerFunc": { "prefix": "func", "body": [ "func $1(w http.ResponseWriter, r *http.Request) {", "\t$0", "}", ], "description": "Custom snippet to define a http handler function" } } // EOF
Тесты
Написать тесты с VSCode так же просто, как запустить терминал (Ctrl (или Cmd) + Shift + `) и запустить команду go test
в пакет для тестирования. Однако сначала нам нужно написать тесты.
Допустим, у нас есть файл sum.go с этой тривиальной функцией:
package demo // Sum adds two numbers a and b to produce a sum, c func Sum(a, b int) (c int) { c = a + b return }
Мы могли бы сгенерировать как модульные, так и интеграционные тесты для пакета, используя gotests
набор.
go get -u github.com/cweill/gotests/...
Чтобы использовать его, откройте Command Pallete (Ctrl (или Cmd) + Shift + P). Затем введите Go:
, вы должны увидеть все команды, доступные в настоящее время с расширением Go. Когда вы выбираете Go: Generate Unit Tests For File
, вы должны иметь этот вывод в файле sum_test.go, куда мы затем можем добавить наши тестовые примеры:
package demo import "testing" func TestSum(t *testing.T) { type args struct { a int b int } tests := []struct { name string args args wantC int }{ // TODO: Add test cases. } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { if gotC := Sum(tt.args.a, tt.args.b); gotC != tt.wantC { t.Errorf("Sum() = %v, want %v", gotC, tt.wantC) } }) } }
С другой стороны, моки можно делать с помощью пакета mockery
. Мы могли бы создать настраиваемую задачу для автоматического создания макетов. Давайте изменим файл sum.go, добавив в него еще одну тривиальную, но многословную реализацию операции Sum:
package demo import "math/cmplx" // Solver performs operations on numbers, natural, real or complex. // It performs only the Sum operation for now. type Solver interface { Sum() (r, θ float64) } // Real represents a real number type Real struct { a float64 b float64 } // Complex represents a complex number type Complex struct { a complex128 b complex128 } // Sum adds two real numbers a and b to produce a sum, c func (r *Real) Sum() (c, θ float64) { c, θ = r.a+r.b, 0 return } // Sum adds two complex numbers a and b to produce a sum, c func (cx *Complex) Sum() (c, θ float64) { c, θ = cmplx.Polar(cx.a + cx.b) return }
Затем, чтобы автоматически создавать макеты с помощью VSCode, убедитесь, что у вас установлен пакет mockery
через:
go get -u github.com/vektra/mockery.../
Затем мы создаем задачу, используя Терминал → Настроить задачи…. Если в настоящее время у вас нет задач для настройки, вам нужно будет создать новую на основе шаблона. Это создает файл tasks.json в папке .vscode вашего рабочего каталога, где вы можете создавать все виды задач. Теперь измените tasks.json, чтобы он выглядел так:
{ "version": "2.0.0", "tasks": [ { "label": "Go Mockery", "type": "shell", "command": "mockery -all", }, // The next three assumes a main package exists in project or workspace root { "label": "Go Run", "type": "shell", "command": "go run .", "problemMatcher": [ "$go" ], }, { "label": "Go Build", "type": "shell", "command": "go build .", "problemMatcher": [ "$go" ], }, { "label": "Go Build and Run", "type": "shell", "command": "go build . && ./${workspaceFolderBasename}", "problemMatcher": [ "$go" ], "group": { "kind": "build", "isDefault": true } }, ] } // EOF
Обратите внимание, что в образце файла tasks.json я добавил простую задачу для автоматического создания макетов для всех интерфейсов, найденных в проекте. Следующие три задачи: запуск, сборка и сборка и запуск полезны, но не обязательны.
Давайте проверим это, запустив задачу Go Mockery
(Терминал → Выполнить задачи…). Затем мы выбираем первый вариант с надписью Продолжить без сканирования вывода задачи. Затем мы должны увидеть макет модели для интерфейса Solver в папке mocks корня проекта. Должно получиться так:
// Code generated by mockery v1.0.0. DO NOT EDIT. package mocks import mock "github.com/stretchr/testify/mock" // Solver is an autogenerated mock type for the Solver type type Solver struct { mock.Mock } // Sum provides a mock function with given fields: func (_m *Solver) Sum() (float64, float64) { ret := _m.Called() var r0 float64 if rf, ok := ret.Get(0).(func() float64); ok { r0 = rf() } else { r0 = ret.Get(0).(float64) } var r1 float64 if rf, ok := ret.Get(1).(func() float64); ok { r1 = rf() } else { r1 = ret.Get(1).(float64) } return r0, r1 }
Тесты - важная часть написания полезных программ на Go. Таким образом, при правильных тестах может даже не потребоваться отладчик для проверки ошибок.
Заключение
Вот и все! Руководство по использованию VSCode для написания кода Go. Тем не менее, я хотел, чтобы вы повысили продуктивность, даже если это немного.
Спасибо, что зашли.