Programming language: Go
License: Apache License 2.0
Tags: Web Frameworks    

Ginrpc alternatives and similar packages

Based on the "Web Frameworks" category.
Alternatively, view Ginrpc alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of Ginrpc or a related project?

Add another 'Web Frameworks' Package


Build Status Go Report Card codecov GoDoc Mentioned in Awesome Go


Automatic parameter binding base on go-gin




Golang gin automatic parameter binding

  • Support for RPC automatic mapping
  • Support object registration
  • Support annotation routing
  • base on go-gin on json restful style
  • implementation of parameter filtering and binding with request
  • code registration simple and supports multiple ways of registration
  • grpc-go bind support
  • Support swagger MORE
  • Support markdown/mindoc MORE
  • Support call before and after deal(ginrpc.WithBeforeAfter)

  • DEMO


  • go mod: go get -u github.com/xxjwxc/ginrpc@master

API details

Three interface modes are supported

  • func(*gin.Context) // go-gin Raw interface

func(*api.Context) // Custom context type

  • func(*api.Context,req) // Custom context type,with request


  • func(*gin.Context,*req) // go-gin context,with request


  • func(*gin.Context,*req)(*resp,error) // go-gin context,with request,return parameter and error ==> grpc-go


一. Parameter auto binding,Object registration (annotation routing)

Initialization project (this project is named after gmsec)

``` go mod init gmsec ```

coding [more>>](hhttps://github.com/gmsec/gmsec)

package main

import (

    _ "gmsec/routers" // Debug mode requires adding [mod] / routes to register annotation routes.debug模式需要添加[mod]/routers 注册注解路由
    "github.com/xxjwxc/public/mydoc/myswagger" // swagger 支持


type ReqTest struct {
    Access_token string `json:"access_token"`
    UserName     string `json:"user_name" binding:"required"` // With verification mode
    Password     string `json:"password"`

// Hello ...
type Hello struct {

// Hello Annotated route (bese on beego way)
// @Router /block [post,get]
func (s *Hello) Hello(c *api.Context, req *ReqTest) {
    c.JSON(http.StatusOK, "ok")

// Hello2 Route without annotation (the parameter is 2 default post)
func (s *Hello) Hello2(c *gin.Context, req ReqTest) {
    c.JSON(http.StatusOK, "ok")

// [grpc-go](https://github.com/grpc/grpc-go)
// with request,return parameter and error
// TestFun6 Route without annotation (the parameter is 2 default post)
func TestFun6(c *gin.Context, req ReqTest) (*ReqTest, error) {
    //c.JSON(http.StatusOK, req)
    return &req, nil

func main() {

    // swagger
    myswagger.SetSchemes(true, false)
    // -----end --
    base := ginrpc.New()
    router := gin.Default() // or router :=  gin.Default().Group("/xxjwxc")
    base.Register(router, new(Hello)) // object register like(go-micro)
    router.POST("/test6", base.HandlerFunc(TestFun6))                            // function register
    base.RegisterHandlerFunc(router, []string{"post", "get"}, "/test", TestFun6) 

- Annotation routing related instructions

// @Router /block [post,get]
@Router tag  
/block router 
[post,get] method 

  • @Router - [-] indicates ignore

#### Note: if there is no annotation route in the object function, the system will add annotation route by default. Post mode: with req (2 parameters (CTX, req)), get mode is a parameter (CTX)

1. Annotation route will automatically create [mod]/routes/gen_router.go file, which needs to be added when calling:

_ "[mod]/routers" // Debug mode requires adding [mod] / routes to register annotation routes


By default, the [gen_router. Data] file will also be generated in the root directory of the project (keep this file, and you can embed it without adding the above code)

2. way of annotation route :

more to saying  [gmsec](https://github.com/gmsec/gmsec)

3. Parameter description

ginrpc.WithCtx : Set custom context

ginrpc.WithDebug(true) : Set debug mode

ginrpc.WithOutDoc(true) : output markdown/swagger api doc

ginrpc.WithBigCamel(true) : Set big camel standard (false is web mode, _, lowercase)

ginrpc.WithBeforeAfter(&ginrpc.DefaultGinBeforeAfter{}) : Before After call


4. Execute curl to automatically bind parameters. See the results directly

  curl '' -H 'Content-Type: application/json' -d '{"access_token":"111", "user_name":"222", "password":"333"}'
  curl '' -H 'Content-Type: application/json' -d '{"access_token":"111", "user_name":"222", "password":"333"}'

二. swagger/markdown/mindoc Document generation description

    ginrpc.WithOutDoc(true) : output markdown/swagger

1.For object registration 'ginrpc. Register' mode, document export is supported

2.Export supports annotation routing, Parameter annotation and default value (tag '. default')

3.Default export path:(/docs/swagger/swagger.json,/docs/markdown)

4 struct demo

type ReqTest struct {
    AccessToken string `json:"access_token"`
    UserName    string `json:"user_name" binding:"required"` // 带校验方式
    Password    string `json:"password"`

三. Support to call Middleware

  • using ginrpc.WithBeforeAfter(&ginrpc.DefaultGinBeforeAfter{})
  • You can also implement functions (single types) on objects go // GinBeforeAfter Execute middleware before and after the object call (support adding the object separately from the object in total) type GinBeforeAfter interface { GinBefore(req *GinBeforeAfterInfo) bool GinAfter(req *GinBeforeAfterInfo) bool }

Stargazers over time

Stargazers over time

coding address:ginprc Please give star support