go-zero is a web and rpc framework written in Go. It's born to ensure the stability of the busy sites with resilient design. Builtin goctl greatly improves the development productivity.

go-zero

English | 简体中文

Go codecov Go Report Card Release License: MIT

0. what is go-zero

go-zero is a web and rpc framework that with lots of engineering practices builtin. It’s born to ensure the stability of the busy services with resilience design, and has been serving sites with tens of millions users for years.

go-zero contains simple API description syntax and code generation tool called goctl. You can generate Go, iOS, Android, Kotlin, Dart, TypeScript, JavaScript from .api files with goctl.

Advantages of go-zero:

  • improve the stability of the services with tens of millions of daily active users
  • builtin chained timeout control, concurrency control, rate limit, adaptive circuit breaker, adaptive load shedding, even no configuration needed
  • builtin middlewares also can be integrated into your frameworks
  • simple API syntax, one command to generate couple of different languages
  • auto validate the request parameters from clients
  • plenty of builtin microservice management and concurrent toolkits

Architecture

1. Backgrounds of go-zero

At the beginning of 2018, we decided to re-design our system, from monolithic architecture with Java+MongoDB to microservice architecture. After researches and comparison, we chose to:

  • Golang based
    • great performance
    • simple syntax
    • proven engineering efficiency
    • extreme deployment experience
    • less server resource consumption
  • Self-designed microservice architecture
    • I have rich experience on designing microservice architectures
    • easy to location the problems
    • easy to extend the features

2. Design considerations on go-zero

By designing the microservice architecture, we expected to ensure the stability, as well as the productivity. And from just the beginning, we have the following design principles:

  • keep it simple
  • high availability
  • stable on high concurrency
  • easy to extend
  • resilience design, failure-oriented programming
  • try best to be friendly to the business logic development, encapsulate the complexity
  • one thing, one way

After almost half a year, we finished the transfer from monolithic system to microservice system, and deployed on August 2018. The new system guaranteed the business growth, and the system stability.

3. The implementation and features of go-zero

go-zero is a web and rpc framework that integrates lots of engineering practices. The features are mainly listed below:

  • powerful tool included, less code to write
  • simple interfaces
  • fully compatible with net/http
  • middlewares are supported, easy to extend
  • high performance
  • failure-oriented programming, resilience design
  • builtin service discovery, load balancing
  • builtin concurrency control, adaptive circuit breaker, adaptive load shedding, auto trigger, auto recover
  • auto validation of API request parameters
  • chained timeout control
  • auto management of data caching
  • call tracing, metrics and monitoring
  • high concurrency protected

As below, go-zero protects the system with couple layers and mechanisms:

Resilience

4. Future development plans of go-zero

  • auto generate API mock server, make the client debugging easier
  • auto generate the simple integration test for the server side just from the .api files

5. Installation

Run the following command under your project:

go get -u github.com/tal-tech/go-zero

6. Quick Start

  1. full examples can be checked out from below:

    Rapid development of microservice systems

    Rapid development of microservice systems - multiple RPCs

  2. install goctl

    goctlcan be read as go control. goctl means not to be controlled by code, instead, we control it. The inside go is not golang. At the very beginning, I was expecting it to help us improve the productivity, and make our lives easier.

    GO111MODULE=on go get -u github.com/tal-tech/go-zero/tools/goctl

    make sure goctl is executable.

  3. create the API file, like greet.api, you can install the plugin of goctl in vs code, api syntax is supported.

    type Request struct {
      Name string `path:"name,options=you|me"` // parameters are auto validated
    }
    
    type Response struct {
      Message string `json:"message"`
    }
    
    service greet-api {
      @handler GreetHandler
      get /greet/from/:name(Request) returns (Response);
    }

    the .api files also can be generate by goctl, like below:

    goctl api -o greet.api
  4. generate the go server side code

    goctl api go -api greet.api -dir greet

    the generated files look like:

    ├── greet
    │   ├── etc
    │   │   └── greet-api.yaml        // configuration file
    │   ├── greet.go                  // main file
    │   └── internal
    │       ├── config
    │       │   └── config.go         // configuration definition
    │       ├── handler
    │       │   ├── greethandler.go   // get/put/post/delete routes are defined here
    │       │   └── routes.go         // routes list
    │       ├── logic
    │       │   └── greetlogic.go     // request logic can be written here
    │       ├── svc
    │       │   └── servicecontext.go // service context, mysql/redis can be passed in here
    │       └── types
    │           └── types.go          // request/response defined here
    └── greet.api                     // api description file
    

    the generated code can be run directly:

    cd greet
    go mod init
    go mod tidy
    go run greet.go -f etc/greet-api.yaml

    by default, it’s listening on port 8888, while it can be changed in configuration file.

    you can check it by curl:

    curl -i http://localhost:8888/greet/from/you

    the response looks like:

    HTTP/1.1 200 OK
    Date: Sun, 30 Aug 2020 15:32:35 GMT
    Content-Length: 0
  5. Write the business logic code

    • the dependencies can be passed into the logic within servicecontext.go, like mysql, reds etc.
    • add the logic code in logic package according to .api file
  6. Generate code like Java, TypeScript, Dart, JavaScript etc. just from the api file

    goctl api java -api greet.api -dir greet
    goctl api dart -api greet.api -dir greet
    ...

7. Benchmark

benchmark

Checkout the test code

8. Documents (adding)

9. Important notes

  • Use grpc 1.29.1, because etcd lib doesn’t support latter versions.

    google.golang.org/grpc v1.29.1

10. Chat group

Join the chat via https://join.slack.com/t/go-zeroworkspace/shared_invite/zt-m39xssxc-kgIqERa7aVsujKNj~XuPKg

Comments
  • 支持客户端使用K8s Service进行服务发现

    支持客户端使用K8s Service进行服务发现

    配置方法

    其中Name、Namespace、Port分为Kubernetes中Service相应的Name、Namespace、Port

    Transform:
      K8s:
        Name: transform-svc
        Namespace: default
        Port: 8081
    
    
  • 无法链接本地的etcd客户端 无法写入

    无法链接本地的etcd客户端 无法写入

    {"level":"warn","ts":"2021-08-23T17:23:44.850+0800","logger":"etcd-client","caller":"[email protected]/retry_interceptor.go:62","msg":"retrying of unary invoker failed","target":"etcd-endpoints://0xc0001a1880/#initially=[192.168.1.57:2379]","attempt":0,"error":"rpc error: code = Dead lineExceeded desc = latest balancer error: last connection error: connection error: desc = "transport: Error while dialing dial tcp 0.0.0 .0:2379: connectex: No connection could be made because the target machine actively refused it.""} {"level":"info","ts":"2021-08-23T17:23:44.850+0800","logger":"etcd-client","caller":"[email protected]/client.go:207","msg":"Auto sync endpoints f ailed.","error":"context deadline exceeded"}

  • User-defined metrics in Prometheus is not collected

    User-defined metrics in Prometheus is not collected

    • 增加一个中间件, 自定义一个指标
    const serverNamespace = "golang"
    
    type CheckCustomerUuidMiddleware struct {
    	metric metric.GaugeVec
    }
    
    func NewCheckCustomerUuidMiddleware(env string) *CheckCustomerUuidMiddleware {
    
    	return &CheckCustomerUuidMiddleware{
    		metric: metric.NewGaugeVec(&metric.GaugeVecOpts{
    			Namespace: serverNamespace,
    			Subsystem: "fail",
    			Name:       "_notification",
    			Help:      "template and customer uuid not match.",
    			Labels:    []string{"mid"},
    		}),
    	}
    }
    
    func (m *CheckCustomerUuidMiddleware) Handle(next http.HandlerFunc) http.HandlerFunc {
    	return func(w http.ResponseWriter, r *http.Request) {
    		defer func() {
    			m.metric.Add(1, "33")
    			m.metric.Add(1, "103")
    			m.metric.Set(11, "33")
    			m.metric.Set(11, "103")
    		}()
    
    		next.ServeHTTP(w, r)
    	}
    }
    
    • rest.WithMiddlewares 设置全局中间件

    • 结果: 框架自带的指标数据提交了, 自定义的没有

    • 环境

    • go version go1.16.6 windows/amd64

    • zeromicro/go-zero v1.3.1

    • win 11

  • Welcome to communicate in English if possible. / 欢迎大家使用英语交流

    Welcome to communicate in English if possible. / 欢迎大家使用英语交流

    Hi, dear all

    It would be gratefull if you guys could communicate with each oher in English. Thus, we could have more people around the world to join this project in the near future. Thanks again for your hard working and contribution to the open source community!

  • goctl docker template optimization

    goctl docker template optimization

    Describe the bug goctl docker 生成的模板

    ✦ λ  tree -L 2
    .
    ├── order
    │   ├── api
    │   ├── model
    │   └── rpc
    ├── pay
    │   ├── api
    │   ├── model
    │   └── rpc
    ├── product
    │   ├── api
    │   ├── model
    │   └── rpc
    └── user
        ├── api
        ├── model
        └── rpc
    
    16 directories, 0 files
    

    以go-zero-mall项目为例,进入order/api目录生成Dockerfile (由于goctl docker 没有-o选项只能进入相应的服务目录去运行)

    cd service/order/api
    goctl docker --go order.go --port 9000
    

    在service/order/api 服务有go.mod go.sum 的情况下,该命令生成的是

    FROM golang:alpine AS builder
    
    LABEL stage=gobuilder
    
    ENV CGO_ENABLED 0
    ENV GOPROXY https://goproxy.cn,direct
    
    RUN apk update --no-cache && apk add --no-cache tzdata
    
    WORKDIR /build
    
    ADD go.mod .
    ADD go.sum .
    RUN go mod download
    COPY . .
    COPY ./etc /app/etc
    RUN go build -ldflags="-s -w" -o /app/order ./order.go
    
    
    FROM scratch
    
    COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
    COPY --from=builder /usr/share/zoneinfo/Asia/Shanghai /usr/share/zoneinfo/Asia/Shanghai
    ENV TZ Asia/Shanghai
    
    WORKDIR /app
    COPY --from=builder /app/order /app/order
    COPY --from=builder /app/etc /app/etc
    
    EXPOSE 9000
    
    CMD ["./order", "-f", "etc/order.yaml"]
    

    在service/order/api 服务没有go.mod go.sum 的情况下,该命令生成的是

    FROM golang:alpine AS builder
    
    LABEL stage=gobuilder
    
    ENV CGO_ENABLED 0
    ENV GOPROXY https://goproxy.cn,direct
    
    RUN apk update --no-cache && apk add --no-cache tzdata
    
    WORKDIR /build
    
    ADD go.mod .
    ADD go.sum .
    RUN go mod download
    COPY . .
    COPY service/order/api/etc /app/etc
    RUN go build -ldflags="-s -w" -o /app/order service/order/api/order.go
    
    
    FROM scratch
    
    COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
    COPY --from=builder /usr/share/zoneinfo/Asia/Shanghai /usr/share/zoneinfo/Asia/Shanghai
    ENV TZ Asia/Shanghai
    
    WORKDIR /app
    COPY --from=builder /app/order /app/order
    COPY --from=builder /app/etc /app/etc
    
    EXPOSE 9000
    
    CMD ["./order", "-f", "etc/order.yaml"]
    

    这个情况下 RUN go build -ldflags="-s -w" -o /app/order service/order/api/order.go 最后的那个路径是不对的,需要手动修正

    通常情况下,每个微服务一个Dockerfile,单独build镜像,build context就是该服务整个目录。而go build 不要指定输入文件的。 所以RUN go build -ldflags="-s -w" -o /app/order 这样就够了

    也就是说截图中画圈的完全可以去掉

    Screenshots image

    Environments (please complete the following information):

    • OS: mac OS
    • go-zero version 1.3.3
    • goctl version 1.3.3
  • 使用durationLogger打印日志,崩溃

    使用durationLogger打印日志,崩溃

    部分调用栈信息如下:
    at /usr/local/go/src/runtime/signal_unix.go:846 7 0x0000000000437a4b in runtime.fatalpanic at /usr/local/go/src/runtime/panic.go:1216 8 0x00000000004373b0 in runtime.gopanic at /usr/local/go/src/runtime/panic.go:1064 9 0x000000000044d013 in runtime.panicmem at /usr/local/go/src/runtime/panic.go:212 10 0x000000000044d013 in runtime.sigpanic at /usr/local/go/src/runtime/signal_unix.go:720 11 0x00000000005e7ee6 in log/syslog.(*Writer).Write at /usr/local/go/src/log/syslog/syslog.go:175 12 0x000000000051c6ab in encoding/json.(*Encoder).Encode at /usr/local/go/src/encoding/json/stream.go:231 13 0x00000000005eb938 in github.com/tal-tech/go-zero/core/logx.outputJson at /root/go/pkg/mod/github.com/tal-tech/[email protected]/core/logx/logs.go:380 14 0x00000000005e9eab in github.com/tal-tech/go-zero/core/logx.(*durationLogger).write at /root/go/pkg/mod/github.com/tal-tech/[email protected]/core/logx/durationlogger.go:66 15 0x00000000005e9a75 in github.com/tal-tech/go-zero/core/logx.(*durationLogger).Infof at /root/go/pkg/mod/github.com/tal-tech/[email protected]/core/logx/durationlogger.go:41

  • AWS Lambda: panic: cannot statfs cgroup root: no such file or directory

    AWS Lambda: panic: cannot statfs cgroup root: no such file or directory

    Describe the bug Running in AWS lambda, the application cannot start due to panic: cannot statfs cgroup root: no such file or directory from go/pkg/mod/github.com/zeromicro/[email protected]/core/stat/internal/cgroup_linux.go:191

    See opencontainers/runc#2634 - they don't execute this code on init

    To Reproduce Steps to reproduce the behavior, if applicable:

    1. The code is
    package main
    
    import (
    	"context"
    	"github.com/aws/aws-lambda-go/lambda"
    	"github.com/zeromicro/go-zero/core/stat"
    )
    
    func main() {
    	stat.CpuUsage()
    	lambda.Start(eventHandler)
    }
    
    type Event struct{}
    
    func eventHandler(ctx context.Context, ev Event) error {
    	return nil
    }
    
    1. The error is
    panic: cannot statfs cgroup root: no such file or directory
    --
    goroutine 1 [running]:
    github.com/zeromicro/go-zero/core/stat/internal.isCgroup2UnifiedMode.func1()
    /Users/josh/go/pkg/mod/github.com/zeromicro/[email protected]/core/stat/internal/cgroup_linux.go:191 +0x13a
    sync.(*Once).doSlow(0xc00008dcf0?, 0x0?)
    /opt/homebrew/Cellar/go/1.18.1/libexec/src/sync/once.go:68 +0xc2
    sync.(*Once).Do(...)
    /opt/homebrew/Cellar/go/1.18.1/libexec/src/sync/once.go:59
    github.com/zeromicro/go-zero/core/stat/internal.isCgroup2UnifiedMode()
    /Users/josh/go/pkg/mod/github.com/zeromicro/[email protected]/core/stat/internal/cgroup_linux.go:182 +0x31
    github.com/zeromicro/go-zero/core/stat/internal.currentCgroup()
    /Users/josh/go/pkg/mod/github.com/zeromicro/[email protected]/core/stat/internal/cgroup_linux.go:39 +0x17
    github.com/zeromicro/go-zero/core/stat/internal.cpuSets()
    /Users/josh/go/pkg/mod/github.com/zeromicro/[email protected]/core/stat/internal/cpu_linux.go:112 +0x19
    github.com/zeromicro/go-zero/core/stat/internal.init.0()
    /Users/josh/go/pkg/mod/github.com/zeromicro/[email protected]/core/stat/internal/cpu_linux.go:27 +0x1d
    2022/06/14 21:51:22 exit status 2
    

    Expected behavior Running application

    Screenshots

    Environments (please complete the following information):

    • OS: Linux
    • go-zero version: 1.3.4
    • goctl version: 1.3.4

    More description Using Go 1.18 on AWS Lambda

    The code in question is

    func isCgroup2UnifiedMode() bool {
    	isUnifiedOnce.Do(func() {
    		var st unix.Statfs_t
    		err := unix.Statfs(cgroupDir, &st)
    		if err != nil {
    			if os.IsNotExist(err) && runningInUserNS() {
    				// ignore the "not found" error if running in userns
    				isUnified = false
    				return
    			}
    			panic(fmt.Sprintf("cannot statfs cgroup root: %s", err))
    		}
    		isUnified = st.Type == unix.CGROUP2_SUPER_MAGIC
    	})
    
    	return isUnified
    }
    
  • API return 不支持除普通结构体、数组(向前兼容,后续考虑废弃)外的其他数据类型作为响应体

    API return 不支持除普通结构体、数组(向前兼容,后续考虑废弃)外的其他数据类型作为响应体

    请问,为什么会考虑废弃数组?

    如果废弃的话,根据 https://go-zero.dev/cn/template.html 来实现统一格式的body相应,则那么无法支持 Data 为数组的情况,如下:

    {
      "code": 0,
      "msg": "OK",
      "data": [{},{}]
    }
    

    你们是否会再考虑考虑?

  • goctl model mysql不能生成代码

    goctl model mysql不能生成代码

    1. 最新版位v1.1.7, 但go get goctl是v1.1.6
    2. 使用workbench生成sql,其中包含三个表, 总是提示错误 goctl model mysql ddl -src="./*.sql" -dir="./sql/model" error: syntax error at position 461 near 'drop
    3. 只有把包含三个table的sql文件,删的只剩一个table才能创建成功。
    4. https://github.com/jackluo2012/datacenter/blob/main/sql.sql 这个也是使用的go-zero, 也不能生成代码, 同样使用v1.1.6
  • go mod tidy error:module declares its path as: github.com/zeromicro/go-zero but was required as: github.com/tal-tech/go-zero

    go mod tidy error:module declares its path as: github.com/zeromicro/go-zero but was required as: github.com/tal-tech/go-zero

    Follow the steps on the official website,When creating a new service,run "go mod tidy"Tips:

    go: go-zero-test1/test1 imports
            github.com/tal-tech/go-zero/core/conf: github.com/tal-tech/[email protected]: parsing go.mod:
            module declares its path as: github.com/zeromicro/go-zero
                    but was required as: github.com/tal-tech/go-zero
    

    github.com/tal-tech/go-zero/core/conf/config.go Code of

    import (
    	"fmt"
    	"io/ioutil"
    	"log"
    	"os"
    	"path"
    	"github.com/zeromicro/go-zero/core/mapping"
    )
    

    Change the model so that it can run

    module go-zero
    go 1.16
    require github.com/tal-tech/go-zero v1.1.4
    

    我英语实在不好,基本都是机翻译用汉语再说一下

    按照官网的步骤新建一个单体服务运行go mod tidy的时候提示:

    go: go-zero-test1/test1 imports
            github.com/tal-tech/go-zero/core/conf: github.com/tal-tech/[email protected]: parsing go.mod:
            module declares its path as: github.com/zeromicro/go-zero
                    but was required as: github.com/tal-tech/go-zero
    

    我看到github.com/tal-tech/go-zero/core/conf/config.go的代码

    import (
    	"fmt"
    	"io/ioutil"
    	"log"
    	"os"
    	"path"
    
    	"github.com/zeromicro/go-zero/core/mapping"
    )
    

    但是把go.mod改为

    module go-zero
    
    go 1.16
    
    require github.com/tal-tech/go-zero v1.1.4
    

    就可以成功。

    默认下载的时 v1.3.0版本

  • Timeout on first insert into cloud mysql using model.

    Timeout on first insert into cloud mysql using model.

    如题问题,程序框架是前端发请求到api然后api给rpc的这么一个标准流程。

    但是现在遇到是,当刚刚跑起来rpc和api服务的时候,发送请求会遇到 context deadline的问题,报错如下:

    {"@timestamp":"2022-08-26T00:17:49.712+08:00","caller":"clientinterceptors/durationinterceptor.go:25","content":"fail - etcd:/127.0.0.1:2379/user.rpc/user.User/sms - countryCode:86  phone:11451498  verifyCode:114514 - rpc error: code = 
    DeadlineExceeded desc = context deadline exceeded","duration":"2001.1ms","level":"info","span":"62f365ebf480a33e","trace":"c72fb114b15587fe726e337ff3ae75ec"}
    

    使用的代码是

    userInfos, err := l.svcCtx.UserModel.QueryByPhone(l.ctx, in.Phone)
    ...
    // 报错行
    result, err := l.svcCtx.UserModel.Insert(l.ctx, &model.User{
    			...
    		})
    ...
    

    代码运行中我首先会去查询是否有这个用户然后再帮助用户注册,但是第一次去进行查询的时候反倒没有context deadline,第二次插入才出现

    Insert是使用的model生成的代码调用的,QueryByPhone是基于model生成代码自己写的查询代码,使用的QueryRows的函数。

    ...
    m.conn.QueryRows(&resp, query, phone)
    ...
    

    值得区分的是,生成代码里面采用了CacheRedis,但是redis我本身跑在本地上,不应该会导致超时。Mysql服务器则跑在了一个远程服务端。 然后这里最诡异的是这个bug只会在刚刚跑起来的第一次请求出现,而不会在第二次请求的时候出现,甚至后续请求也没有出现,所以不太清楚是什么导致的。

  • feat: support the specified timeout of rpc methods

    feat: support the specified timeout of rpc methods

    1. The GRPC server can set the specified timeout of method in order to override the timeout of config (etc/xxx.yaml)
    2. The GRPC client can replace the timeout in the config (etc/xxx.yaml) by specifying the timeout through timeout call option
  • Goctl RPC Generate Problem

    Goctl RPC Generate Problem

    when I use goctl rpc new greet to generate a new rpc service, the console show a red line: [profiling] error parsing flags: when -address isn't specified, you must include -stream-stats-catapult-json Besides, the code is not generated well, but the folder is generated right. How can I slove this problem, and what cause this issue? Thanks for your reply.

  • How to share middleware among multiple services?

    How to share middleware among multiple services?

    Hello, I wonder how to share middleware like JwtBlockList among multiple services.

    Given an API file like this, goctl would generate middleware under internal/ directory.

    @server(
    	jwt: Auth
    	group: user
    	middleware: JwtBlockList
    )
    

    Are there any API syntax could refer to a public reused middleware, like in pkg/middleware/jwtblocklist/

  • grpc timeout setting

    grpc timeout setting

    I want to set the timeout time of grpc for breakpoint debugging. I found that it can be passed through the ClientOption function. However, the ClientOptions defined in ClientOption is internal and cannot be compiled.

    // MustNewClient returns a Client, exits on any error.
    func MustNewClient(c RpcClientConf, options ...ClientOption) Client {
    	cli, err := NewClient(c, options...)
    	if err != nil {
    		log.Fatal(err)
    	}
    
    	return cli
    }
    
Goal is a toolkit for high productivity web development in Go language in the spirit of Revel Framework that is built around the concept of code generation.

Goal Goal is a set of tools for high productivity web development in Go language. Goal, being mostly inspired by Revel Framework and its discussions,

Sep 27, 2021
A high productivity, full-stack web framework for the Go language.

Revel Framework A high productivity, full-stack web framework for the Go language. Current Version: 1.0.0 (2020-07-11) Supports go.mod package managem

Jan 7, 2023
The web framework for writing faster sites, faster

Gondola The web framework for writing faster sites, faster. Written in Go. View documentation at http://gondolaweb.com. Unless indicated otherwise at

Nov 20, 2022
RPC Framework abstraction layer. Provides foundation of the RonyDesc to generate RPC server/client codes.

RonyKit RonyKit provides the abstraction layer for creating a cluster aware API server. By defining separate components for each task, you are almost

Dec 15, 2022
Microservice framework following best cloud practices with a focus on productivity.

patron Patron is a framework for creating microservices, originally created by Sotiris Mantzaris (https://github.com/mantzas). This fork is maintained

Dec 22, 2022
Roche is a Code Generator and Web Framework, makes web development super concise with Go, CleanArch
Roche is a Code Generator and Web Framework, makes web development super concise with Go, CleanArch

It is still under development, so please do not use it. We plan to release v.1.0.0 in the summer. roche is a web framework optimized for microservice

Sep 19, 2022
Flamingo Framework and Core Library. Flamingo is a go based framework for pluggable web projects. It is used to build scalable and maintainable (web)applications.
Flamingo Framework and Core Library. Flamingo is a go based framework for pluggable web projects. It is used to build scalable and maintainable (web)applications.

Flamingo Framework Flamingo is a web framework based on Go. It is designed to build pluggable and maintainable web projects. It is production ready, f

Jan 5, 2023
Golanger Web Framework is a lightweight framework for writing web applications in Go.

/* Copyright 2013 Golanger.com. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except

Nov 14, 2022
The jin is a simplified version of the gin web framework that can help you quickly understand the core principles of a web framework.

jin About The jin is a simplified version of the gin web framework that can help you quickly understand the core principles of a web framework. If thi

Jul 14, 2022
based on go lang build WEB development framework for go lang beginners .

based on go lang build WEB development framework for go lang beginners .

Oct 31, 2021
An efficient, extensible and easy-to-use RPC framework.
An efficient, extensible and easy-to-use RPC framework.

eRPC eRPC is an efficient, extensible and easy-to-use RPC framework. Suitable for RPC, Microservice, Peer-to-Peer, IM, Game and other fields. 简体中文 Ins

Dec 29, 2022
⚡ Rux is an simple and fast web framework. support middleware, compatible http.Handler interface. 简单且快速的 Go web 框架,支持中间件,兼容 http.Handler 接口

Rux Simple and fast web framework for build golang HTTP applications. NOTICE: v1.3.x is not fully compatible with v1.2.x version Fast route match, sup

Dec 8, 2022
A powerful go web framework for highly scalable and resource efficient web application

webfr A powerful go web framework for highly scalable and resource efficient web application Installation: go get -u github.com/krishpranav/webfr Exa

Nov 28, 2021
A powerful go web framework for highly scalable and resource efficient web application

A powerful go web framework for highly scalable and resource efficient web application

Oct 3, 2022
GoFrame is a modular, powerful, high-performance and enterprise-class application development framework of Golang.
GoFrame is a modular, powerful, high-performance and enterprise-class application development framework of Golang.

GoFrame English | 简体中文 GoFrame is a modular, powerful, high-performance and enterprise-class application development framework of Golang. If you're a

Jan 2, 2023
gnark is a fast, open-source library for zero-knowledge proof protocols written in Go
gnark is a fast, open-source library for zero-knowledge proof protocols written in Go

gnark gnark is a framework to execute (and verify) algorithms in zero-knowledge. It offers a high-level API to easily design circuits and fast impleme

Jan 1, 2023
gnark is a fast, open-source library for zero-knowledge proof protocols written in Go
gnark is a fast, open-source library for zero-knowledge proof protocols written in Go

gnark gnark is a framework to execute (and verify) algorithms in zero-knowledge. It offers a high-level API to easily design circuits and fast impleme

Jun 1, 2021
A web app built using Go Buffalo web framework

Welcome to Buffalo Thank you for choosing Buffalo for your web development needs. Database Setup It looks like you chose to set up your application us

Feb 7, 2022