Golang清洁架构生成器

Golang清洁架构生成器 大家好,我想向大家介绍 Gojira,这是我一直在开发的一个项目。

它是一个整洁架构项目生成器,包含自动生成模块的功能,涉及项目文件夹结构、Gin-Gonic、Bcrypt、JWT 以及 CRUD 示例。

功能特性

  • 整洁架构文件夹结构
  • Gin Gonic
  • JWT
  • Bcrypt
  • 自动生成包含 CRUD 示例的模块
  • 自动生成数据库服务客户端
    • Mysql
    • Gorm
    • Prisma
  • 示例任务 API

GitHub

GitHub - saturnavt/gojira: Gojira 是一个用于创建整洁架构应用程序的 CLI 工具,包含 Gin-Gonic、Bcrypt 和 JWT。

Gojira 是一个 CLI 工具,用于为您创建包含 Gin-Gonic、Bcrypt 和 JWT 的整洁架构应用程序。 - GitHub - saturnavt/gojira: Gojira 是一个 CLI 工具,用于为您创建包含 Gin-Gonic、Bcrypt 和 JWT 的整洁架构应用程序…


更多关于Golang清洁架构生成器的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

你的信息很有用,问题也很有趣,但我没有头绪。

更多关于Golang清洁架构生成器的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Gojira 是一个实用的 Go 语言整洁架构项目生成器,它通过 CLI 工具快速搭建基于 Gin-Gonic 的 Web 应用程序框架。以下是一个使用 Gojira 生成项目并创建模块的示例:

# 安装 Gojira
go install github.com/saturnavt/gojira@latest

# 生成新项目
gojira new myapp

# 进入项目目录
cd myapp

# 生成用户模块(包含 CRUD 示例)
gojira generate module user

生成的用户模块会遵循整洁架构的分层结构:

myapp/
├── internal/
│   ├── domain/
│   │   └── user.go
│   ├── repository/
│   │   └── user_repository.go
│   ├── usecase/
│   │   └── user_usecase.go
│   └── delivery/
│       └── http/
│           └── user_handler.go
├── pkg/
│   ├── database/
│   │   └── mysql.go
│   └── jwt/
│       └── auth.go
└── cmd/
    └── main.go

生成的用户处理器示例代码:

// internal/delivery/http/user_handler.go
package http

import (
	"net/http"
	"github.com/gin-gonic/gin"
	"myapp/internal/usecase"
)

type UserHandler struct {
	userUsecase usecase.UserUsecase
}

func NewUserHandler(u usecase.UserUsecase) *UserHandler {
	return &UserHandler{userUsecase: u}
}

func (h *UserHandler) CreateUser(c *gin.Context) {
	var req CreateUserRequest
	if err := c.ShouldBindJSON(&req); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	
	user, err := h.userUsecase.Create(c.Request.Context(), req.ToEntity())
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		return
	}
	
	c.JSON(http.StatusCreated, user)
}

func (h *UserHandler) GetUser(c *gin.Context) {
	id := c.Param("id")
	user, err := h.userUsecase.GetByID(c.Request.Context(), id)
	if err != nil {
		c.JSON(http.StatusNotFound, gin.H{"error": "user not found"})
		return
	}
	
	c.JSON(http.StatusOK, user)
}

数据库配置自动生成:

// pkg/database/mysql.go
package database

import (
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

func NewMySQL(dsn string) (*gorm.DB, error) {
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		return nil, err
	}
	
	// 自动迁移
	err = db.AutoMigrate(&User{})
	if err != nil {
		return nil, err
	}
	
	return db, nil
}

JWT 认证中间件:

// pkg/jwt/auth.go
package jwt

import (
	"github.com/gin-gonic/gin"
	"github.com/golang-jwt/jwt/v4"
)

func AuthMiddleware(secret string) gin.HandlerFunc {
	return func(c *gin.Context) {
		tokenString := c.GetHeader("Authorization")
		if tokenString == "" {
			c.AbortWithStatusJSON(401, gin.H{"error": "authorization header required"})
			return
		}
		
		token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
			return []byte(secret), nil
		})
		
		if err != nil || !token.Valid {
			c.AbortWithStatusJSON(401, gin.H{"error": "invalid token"})
			return
		}
		
		c.Set("user", token.Claims)
		c.Next()
	}
}

Gojira 通过预置的模板和生成器,减少了搭建整洁架构项目的重复工作,使开发者能够快速开始业务逻辑开发。

回到顶部