gin

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 20, 2024 License: MIT Imports: 12 Imported by: 0

README

Gin Framework - Context扩展

Go Reference Go Report Card MIT License

Gin是一个高性能的Web框架,基于Go语言构建,旨在提供简单易用的API和高效的路由处理。本项目对Gin框架的Context进行了功能扩充,以简化调用流程。

安装

使用Go模块管理工具安装Gin框架:

go get github.com/darkit/gin

Context扩展功能

本项目对Gin的Context进行了扩展,增加了以下功能:

  • 请求类型判断:增加了HTTP请求类型判断。
  • 统一响应结构:提供了成功、失败、错误、禁止访问和资源不存在的统一响应格式,简化了响应的处理。
  • 简化参数获取:通过扩展的Context方法,简化了获取请求参数的流程。
  • 文件上传验证:增加了文件上传的验证功能,支持自定义文件类型和大小限制。
  • CORS支持:简化了跨域请求的处理,提供了方便的方法来允许CORS。
使用示例

以下是一个简单的示例,展示如何使用扩展后的Context:

package main

import (
	"fmt"
	"github.com/darkit/gin"
)

func init() {
	// 注册路由
	gin.Register(gin.MethodAny, "/hello", helloHandler)
	gin.Register(gin.MethodPost, "/upload", uploadHandler)
}

func helloHandler(c *gin.Context) {
	c.AllowCORS() // 允许跨域请求

	// 获取请求参数
	name := c.Param("name")
	if name == "" {
		name = "world" // 默认值
	}

	// 构建响应数据
	data := gin.H{
		"message": fmt.Sprintf("Hello, %s!", name),
		"type":    c.Type(),
		"isSsl":   c.IsSsl(),
		"localIP": c.GetIP(),
		"domain":  c.Domain(),
		"query":   c.Query("queryParam"), // 获取查询参数
	}

	// 发送成功响应
	c.SuccessWithMsg("系统信息获取成功", data)
}

func uploadHandler(c *gin.Context) {
	c.AllowCORS() // 允许跨域请求

	// 获取上传的文件
	file, err := c.FormFile("file")
	if err != nil {
		c.Fail("文件上传失败") // 发送失败响应
		return
	}

	// 验证文件
	config := gin.UploadConfig{
		AllowedExts: []string{".jpg", ".png"}, // 允许的文件扩展名
		MaxSize:     5 * 1024 * 1024,          // 最大文件大小5MB
		SavePath:    "./uploads",              // 保存路径
	}

	if err := c.ValidateFile(file, config); err != nil {
		c.Fail("文件验证失败: " + err.Error()) // 发送失败响应
		return
	}

	// 保存文件
	newFileName, err := c.SaveUploadedFile(file, config)
	if err != nil {
		c.Fail("文件保存失败: " + err.Error()) // 发送失败响应
		return
	}

	// 发送成功响应
	c.SuccessWithMsg("文件上传成功", gin.H{"fileName": newFileName})
}

func main() {
	gin.SetMode(gin.DebugMode)
	engine := gin.Default()              // 创建服务器实例
	gin.InitRouting(engine).Run(":8282") // 启动服务器
}
简化调用流程

通过扩展的Context,用户可以更方便地进行以下操作:

  • 获取请求参数:使用c.Param()c.Query()c.PostForm()方法轻松获取请求参数。
  • 发送响应:使用c.Success()c.Fail()等方法快速发送响应,减少了手动构建响应的复杂性。
  • 文件上传:使用c.SaveUploadedFile()c.ValidateFile()方法,简化文件上传的处理和验证。

主要功能

  • 路由管理:支持多种HTTP方法(GET, POST, PUT, DELETE等)的路由注册。
  • 中间件支持:可以轻松添加中间件以处理请求和响应。
  • JSON响应:提供统一的JSON响应格式,支持成功和失败的响应。
  • 文件上传:支持文件上传和验证功能。
  • 类型判断:增加了HTTP请求类型判断。
  • CORS支持:允许跨域请求。

贡献

欢迎任何形式的贡献!请提交问题或拉取请求。

许可证

本项目采用MIT许可证,详细信息请参见 LICENSE 文件。

Documentation

Index

Constants

View Source
const (
	SuccessCode   = 200 // 成功状态码
	FailCode      = 400 // 失败状态码
	ErrorCode     = 500 // 错误状态码
	ForbiddenCode = 403 // 禁止访问状态码
	NotFound      = 404 // 资源不存在状态码
)
View Source
const (
	MethodAny     = "ANY"
	MethodGet     = "GET"
	MethodHead    = "HEAD"
	MethodPost    = "POST"
	MethodPut     = "PUT"
	MethodPatch   = "PATCH" // RFC 5789
	MethodDelete  = "DELETE"
	MethodConnect = "CONNECT"
	MethodOptions = "OPTIONS"
	MethodTrace   = "TRACE"
)
View Source
const (
	EnvGinMode = "GIN_MODE"

	DebugMode   = "debug"
	ReleaseMode = "release"
	TestMode    = "test"
)

Variables

This section is empty.

Functions

func Default

func Default() *gin.Engine

Default 返回一个带有 Logger 和 Recovery 中间件的 Engine 实例。

func DisableBindValidation

func DisableBindValidation()

DisableBindValidation 关闭默认的验证器。

func EnableJsonDecoderDisallowUnknownFields

func EnableJsonDecoderDisallowUnknownFields()

EnableJsonDecoderDisallowUnknownFields 设置 binding.EnableDecoderDisallowUnknownFields 为 true,以调用 JSON 解码器实例的 DisallowUnknownFields 方法。

func EnableJsonDecoderUseNumber

func EnableJsonDecoderUseNumber()

EnableJsonDecoderUseNumber 设置 binding.EnableDecoderUseNumber 为 true,以调用 JSON 解码器实例的 UseNumber 方法。

func InitRouting

func InitRouting(engine *gin.Engine) *gin.Engine

InitRouting 初始化路由前请先调用 Register 注册路由

func New

func New() *gin.Engine

New 创建一个新的 gin 实例以启动服务器。

func NewRouter

func NewRouter(e *gin.Engine) *_Router

NewRouter 创建一个新的 router 实例

func Register

func Register(method, path string, handlers ...HandlerFunc) error

Register 注册路由

func SetMode

func SetMode(value string)

SetMode 根据输入字符串设置 gin 模式。

func WrapHandler

func WrapHandler(hd HandlerFunc) gin.HandlerFunc

WrapHandler 方法用于将自定义的处理函数转换为 gin.HandlerFunc 类型

Types

type BasicHandler

type BasicHandler struct {
	Handlers map[string]HandlerFunc
}

BasicHandler 结构体用于存储处理函数

func (*BasicHandler) GetHandler

func (b *BasicHandler) GetHandler(action string) HandlerFunc

GetHandler 方法根据动作获取处理函数

func (*BasicHandler) SetHandler

func (b *BasicHandler) SetHandler(action string, handlerFunc HandlerFunc)

SetHandler 方法用于设置处理函数

type Context

type Context struct {
	*gin.Context
}

func (*Context) AllowCORS

func (c *Context) AllowCORS()

AllowCORS 允许跨域请求

func (*Context) BaseFile

func (c *Context) BaseFile() string

BaseFile 获取当前执行的文件

func (*Context) BaseURL

func (c *Context) BaseURL() string

BaseURL 获取当前请求的基本URL(不含QUERY_STRING)

func (*Context) BuildUrl

func (c *Context) BuildUrl(path string, params H) *urlBuilder

BuildUrl 创建一个 UrlBuilder 实例

func (*Context) ContentType

func (c *Context) ContentType() string

ContentType 获取当前请求的CONTENT_TYPE

func (*Context) Domain

func (c *Context) Domain() string

Domain 获取当前包含协议的域名

func (*Context) Error

func (c *Context) Error(msg string, url ...string)

Error 错误响应

func (*Context) Ext

func (c *Context) Ext() string

Ext 获取当前URL的访问后缀

func (*Context) Fail

func (c *Context) Fail(msg string, url ...string)

Fail 失败响应

func (*Context) FailWithData

func (c *Context) FailWithData(msg string, data interface{}, url ...string)

FailWithData 失败响应(带数据)

func (*Context) Forbidden

func (c *Context) Forbidden(msg string, url ...string)

Forbidden 禁止访问响应

func (*Context) GetIP

func (c *Context) GetIP() string

GetIP 获取请求IP

func (*Context) GetToken

func (c *Context) GetToken(name ...string) string

GetToken 从请求头获取Token

func (*Context) GetUserAgent

func (c *Context) GetUserAgent() string

GetUserAgent 获取用户代理信息

func (*Context) Host

func (c *Context) Host() string

Host 获取当前请求的主机名

func (*Context) IsAjax

func (c *Context) IsAjax() bool

IsAjax 判断是否是Ajax请求

func (*Context) IsConnect

func (c *Context) IsConnect() bool

IsConnect 判断是否Connect请求

func (*Context) IsDelete

func (c *Context) IsDelete() bool

IsDelete 判断是否Delete请求

func (*Context) IsGet

func (c *Context) IsGet() bool

IsGet 判断是否GET请求

func (*Context) IsHead

func (c *Context) IsHead() bool

IsHead 判断是否Head请求

func (*Context) IsJson

func (c *Context) IsJson() bool

IsJson 判断是否是Json请求

func (*Context) IsOptions

func (c *Context) IsOptions() bool

IsOptions 判断是否Options请求

func (*Context) IsPatch

func (c *Context) IsPatch() bool

IsPatch 判断是否Patch请求

func (*Context) IsPjax

func (c *Context) IsPjax() bool

IsPjax 判断是否是Pjax请求

func (*Context) IsPost

func (c *Context) IsPost() bool

IsPost 判断是否Post请求

func (*Context) IsPut

func (c *Context) IsPut() bool

IsPut 判断是否Put请求

func (*Context) IsSsl

func (c *Context) IsSsl() bool

IsSsl 判断是否是SSL

func (*Context) IsTrace

func (c *Context) IsTrace() bool

IsTrace 判断是否Trace请求

func (*Context) Method

func (c *Context) Method() string

Method 获取当前请求的方法

func (*Context) NotFound

func (c *Context) NotFound(msg string, url ...string)

NotFound 资源不存在响应

func (*Context) PageResponse

func (c *Context) PageResponse(list interface{}, total int64, page, pageSize int)

PageResponse 分页响应

func (*Context) PanDomain

func (c *Context) PanDomain() string

PanDomain 获取当前访问的泛域名

func (*Context) Param

func (c *Context) Param(param string, defaultValue ...string) string

Param 获取当前请求的变量

func (*Context) Port

func (c *Context) Port() string

Port 获取当前请求的端口

func (*Context) Protocol

func (c *Context) Protocol() string

Protocol 获取当前请求的协议

func (*Context) Redirect

func (c *Context) Redirect(location string)

Redirect 临时重定向

func (*Context) RedirectPermanent

func (c *Context) RedirectPermanent(location string)

RedirectPermanent 永久重定向

func (*Context) RemotePort

func (c *Context) RemotePort() string

RemotePort 获取当前请求的REMOTE_PORT

func (*Context) RequireParams

func (c *Context) RequireParams(params ...string) bool

RequireParams 检查必需参数

func (*Context) Response

func (c *Context) Response(httpStatus, code int, msg string, data interface{}, url ...string)

Response 自定义响应

func (*Context) Root

func (c *Context) Root() string

Root 获取URL访问根地址

func (*Context) RootDomain

func (c *Context) RootDomain() string

RootDomain 获取当前访问的根域名

func (*Context) RootUrl

func (c *Context) RootUrl() string

RootUrl 获取URL访问根目录

func (*Context) SaveUploadedFile

func (c *Context) SaveUploadedFile(file *multipart.FileHeader, config UploadConfig) (string, error)

SaveUploadedFile 保存上传文件

func (*Context) Scheme

func (c *Context) Scheme() string

Scheme 获取当前请求的协议

func (*Context) SubDomain

func (c *Context) SubDomain() string

SubDomain 获取当前访问的子域名

func (*Context) Success

func (c *Context) Success(data interface{}, url ...string)

Success 成功响应

func (*Context) SuccessWithMsg

func (c *Context) SuccessWithMsg(msg string, data interface{}, url ...string)

SuccessWithMsg 成功响应(自定义消息)

func (*Context) Time

func (c *Context) Time() time.Time

Time 获取当前请求的时间

func (*Context) Type

func (c *Context) Type() string

Type 获取当前请求的资源类型

func (*Context) URL

func (c *Context) URL() string

URL 获取当前请求的完整URL

func (*Context) ValidateFile

func (c *Context) ValidateFile(file *multipart.FileHeader, config UploadConfig) error

ValidateFile 验证上传文件

type Controller

type Controller struct {
	// contains filtered or unexported fields
}

Controller 结构体,包含 router 和 Handler

func (*Controller) CONNECT

func (c *Controller) CONNECT(relativePath, action string) *Controller

CONNECT 方法用于在 Controller 中注册 CONNECT 请求的路由

func (*Controller) DELETE

func (c *Controller) DELETE(relativePath, action string) *Controller

DELETE 方法用于在 Controller 中注册 DELETE 请求的路由

func (*Controller) GET

func (c *Controller) GET(relativePath, action string) *Controller

GET 方法用于在 Controller 中注册 GET 请求的路由

func (*Controller) Group

func (c *Controller) Group(relativePath, action string) *Controller

Group 方法用于在 Controller 中创建路由组

func (*Controller) HEAD

func (c *Controller) HEAD(relativePath, action string) *Controller

HEAD 方法用于在 Controller 中注册 HEAD 请求的路由

func (*Controller) OPTIONS

func (c *Controller) OPTIONS(relativePath, action string) *Controller

OPTIONS 方法用于在 Controller 中注册 OPTIONS 请求的路由

func (*Controller) PATCH

func (c *Controller) PATCH(relativePath, action string) *Controller

PATCH 方法用于在 Controller 中注册 PATCH 请求的路由

func (*Controller) POST

func (c *Controller) POST(relativePath, action string) *Controller

POST 方法用于在 Controller 中注册 POST 请求的路由

func (*Controller) PUT

func (c *Controller) PUT(relativePath, action string) *Controller

PUT 方法用于在 Controller 中注册 PUT 请求的路由

func (*Controller) Resource

func (c *Controller) Resource(relativePath string) *Controller

Resource 方法用于在 Controller 中注册 RESTful 风格的路由

func (*Controller) TRACE

func (c *Controller) TRACE(relativePath, action string) *Controller

TRACE 方法用于在 Controller 中注册 TRACE 请求的路由

func (*Controller) Use

func (c *Controller) Use(action string) *Controller

Use 方法用于在 Controller 中注册中间件

type H

type H map[string]any

type Handler

type Handler interface {
	GetHandler(action string) HandlerFunc
	Clone() Handler
}

Handler 接口定义了处理程序的基本方法

type HandlerFunc

type HandlerFunc func(c *Context)

HandlerFunc 定义处理函数的类型

type UploadConfig

type UploadConfig struct {
	AllowedExts []string // 允许的文件扩展名
	MaxSize     int64    // 最大文件大小(字节)
	SavePath    string   // 保存路径
}

UploadConfig 文件上传相关方法

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL