golang集成VSCode DevContainers的RESTful JSON后端开发插件go-starter的使用

Golang集成VSCode DevContainers的RESTful JSON后端开发插件go-starter的使用

go-starter是一个基于Go语言编写的生产级RESTful JSON后端模板,与VSCode DevContainers高度集成。

go starter overview

主要特性

  • 使用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)

使用步骤

  1. 通过GitHub模板仓库功能创建新仓库
  2. 克隆你的新仓库并进入目录
  3. 启动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

1 回复

更多关于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. 最佳实践

  1. 使用go-starter的代码片段快速搭建项目结构
  2. 利用自动import功能保持代码整洁
  3. 定期使用插件提供的重构工具优化代码
  4. 结合DevContainers确保开发环境一致性

通过以上步骤,你可以在VSCode DevContainers环境中高效地使用go-starter插件开发Golang RESTful JSON API。

回到顶部