golang集成VSCode DevContainers的RESTful JSON后端开发插件go-starter的使用
Golang集成VSCode DevContainers的RESTful JSON后端开发插件go-starter的使用
go-starter是一个基于Go语言编写的生产级RESTful JSON后端模板,与VSCode DevContainers高度集成。
主要特性
- 使用Docker Compose和VSCode devcontainers提供完整的本地Go服务开发环境
- 遵循golang-standard/project-layout定义的项目结构
- 提供数据库迁移(sql-migrate)和模型生成(SQLBoiler)工作流
- 集成IntegreSQL用于快速、并发和隔离的PostgreSQL集成测试
- 自动安装推荐的VSCode Go开发扩展
- 集成go-swagger用于编译时生成swagger.yml、结构体和请求/响应验证函数
- 集成MailHog用于SMTP邮件测试
- 集成SwaggerUI用于实时预览Swagger v2模式
- 提供完整的auth包实现,一个可扩展的OAuth2 RESTful JSON API
快速开始
要求
- Docker CE (19.03或更高)
- Docker Compose (1.25或更高)
- VSCode扩展: Remote - Containers (ms-vscode-remote.remote-containers)
使用步骤
- 通过GitHub模板仓库功能创建新仓库
- 克隆你的新仓库并进入目录
- 启动docker-compose开发环境:
# 克隆你的新仓库,进入目录,然后通过帮助脚本启动docker-compose开发环境
./docker-helper.sh --up
进入容器后,你可以运行以下命令:
# 打印所有可用的make目标
make help
# 初始化、构建、测试的快捷方式
make all
# 初始化安装/缓存依赖项并安装工具到bin目录
make init
# 在文件更改后重新构建(生成、格式化、构建、lint)
make
# 执行所有测试
make test
运行服务
在开发容器内运行服务:
# 首先确保有最新的app可执行文件
make build
# 检查是否满足所有就绪条件(数据库可用,mnt路径可写)
app probe readiness -v
# 迁移数据库
app db migrate
# 种子数据库(如果你在/internal/data/fixtures.go中定义了任何fixtures)
app db seed
# 启动本地构建的服务器
app server
# 现在可以通过http://127.0.0.1:8080访问
# 你也可以用一个命令运行以上所有命令
app server --probe --migrate --seed # 或 `app server -pms`
设置项目模块名称
要替换所有出现的allaboutapps.dev/aw/go-stater
(项目的内部模块名)为你想要的模块名:
# 设置新的go项目模块名
make set-module-name
# allaboutapps.dev/<GIT_PROJECT>/<GIT_REPO> (仅内部使用)
# github.com/<USER>/<PROJECT>
# 例如 github.com/majodev/my-service
卸载
只需在你的工作目录(主机上)运行./docker-helper --destroy
即可清除该项目的所有docker相关痕迹(及其卷)。
示例代码
以下是一个简单的RESTful API示例,展示如何使用go-starter创建一个端点:
// api/users/handlers.go
package users
import (
"net/http"
"github.com/labstack/echo/v4"
)
// GetUsersResponse defines the response structure for GET /users
type GetUsersResponse struct {
Users []User `json:"users"`
}
// User defines a user structure
type User struct {
ID string `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
}
// GetUsers handles GET /users
func GetUsers(c echo.Context) error {
// 在实际应用中,这里会从数据库获取用户数据
users := []User{
{
ID: "1",
Name: "John Doe",
Email: "john@example.com",
},
{
ID: "2",
Name: "Jane Smith",
Email: "jane@example.com",
},
}
return c.JSON(http.StatusOK, GetUsersResponse{
Users: users,
})
}
然后在路由中注册这个处理器:
// api/api.go
package api
import (
"github.com/labstack/echo/v4"
"github.com/yourmodule/api/users"
)
// Init initializes the API routes
func Init(e *echo.Echo) {
// Users routes
userGroup := e.Group("/users")
userGroup.GET("", users.GetUsers)
}
维护者
当前维护者:
许可证
MIT
更多关于golang集成VSCode DevContainers的RESTful JSON后端开发插件go-starter的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang集成VSCode DevContainers的RESTful JSON后端开发插件go-starter的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Go Starter插件在VSCode DevContainers中的集成与使用
go-starter是一个用于简化Golang RESTful JSON后端开发的VSCode插件,特别适合在DevContainers环境中使用。下面我将详细介绍如何集成和使用这个插件。
1. 环境准备
首先确保你已经安装:
- VSCode
- Docker
- Remote - Containers扩展
2. 创建DevContainer配置
在项目根目录创建.devcontainer
文件夹,并添加devcontainer.json
文件:
{
"name": "Go REST API Container",
"dockerComposeFile": "docker-compose.yml",
"service": "app",
"workspaceFolder": "/workspace",
"extensions": [
"golang.go",
"github.go-starter"
],
"settings": {
"go.useLanguageServer": true,
"go.gopath": "/go",
"go.goroot": "/usr/local/go"
}
}
3. Docker Compose配置
创建docker-compose.yml
文件:
version: '3'
services:
app:
image: golang:1.19
volumes:
- ..:/workspace
working_dir: /workspace
ports:
- "8080:8080"
command: sleep infinity
4. 使用go-starter插件功能
4.1 快速创建RESTful API
// main.go
package main
import (
"log"
"net/http"
"github.com/go-chi/chi/v5"
"github.com/go-chi/chi/v5/middleware"
)
func main() {
r := chi.NewRouter()
r.Use(middleware.Logger)
r.Get("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Welcome to Go Starter API"))
})
log.Println("Server running on :8080")
http.ListenAndServe(":8080", r)
}
4.2 自动生成CRUD端点
使用go-starter的代码片段功能,输入gocrud
可以快速生成CRUD模板:
// handlers/user.go
package handlers
import (
"net/http"
"github.com/go-chi/chi/v5"
)
type User struct {
ID string `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
}
var users = make(map[string]User)
func GetUsers(w http.ResponseWriter, r *http.Request) {
// 实现获取所有用户逻辑
}
func GetUser(w http.ResponseWriter, r *http.Request) {
// 实现获取单个用户逻辑
}
func CreateUser(w http.ResponseWriter, r *http.Request) {
// 实现创建用户逻辑
}
func UpdateUser(w http.ResponseWriter, r *http.Request) {
// 实现更新用户逻辑
}
func DeleteUser(w http.ResponseWriter, r *http.Request) {
// 实现删除用户逻辑
}
func UserRoutes() chi.Router {
r := chi.NewRouter()
r.Get("/", GetUsers)
r.Post("/", CreateUser)
r.Get("/{id}", GetUser)
r.Put("/{id}", UpdateUser)
r.Delete("/{id}", DeleteUser)
return r
}
4.3 自动生成模型和DTO
使用gomodel
代码片段生成模型:
// models/user.go
package models
import "time"
type User struct {
ID string `json:"id" gorm:"primaryKey"`
Name string `json:"name" validate:"required"`
Email string `json:"email" validate:"required,email"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
type CreateUserDTO struct {
Name string `json:"name" validate:"required"`
Email string `json:"email" validate:"required,email"`
}
type UpdateUserDTO struct {
Name string `json:"name"`
Email string `json:"email" validate:"omitempty,email"`
}
5. 常用功能
5.1 自动导入依赖
当保存文件时,go-starter会自动组织import语句。
5.2 测试生成
使用gotest
代码片段快速生成测试模板:
// handlers/user_test.go
package handlers_test
import (
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/assert"
)
func TestGetUsers(t *testing.T) {
req, err := http.NewRequest("GET", "/users", nil)
assert.NoError(t, err)
rr := httptest.NewRecorder()
handler := http.HandlerFunc(GetUsers)
handler.ServeHTTP(rr, req)
assert.Equal(t, http.StatusOK, rr.Code)
// 添加更多断言
}
6. 调试配置
在.vscode/launch.json
中添加调试配置:
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch API",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}/main.go",
"env": {
"PORT": "8080",
"ENV": "development"
}
}
]
}
7. 最佳实践
- 使用go-starter的代码片段快速搭建项目结构
- 利用自动import功能保持代码整洁
- 定期使用插件提供的重构工具优化代码
- 结合DevContainers确保开发环境一致性
通过以上步骤,你可以在VSCode DevContainers环境中高效地使用go-starter插件开发Golang RESTful JSON API。