sponge

package module
v1.8.0 Latest Latest
Warning

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

Go to latest
Published: Apr 13, 2024 License: MIT Imports: 0 Imported by: 0

README

English | 简体中文

Go Report codecov Go Reference Go Awesome Go

Sponge is a powerful development framework that integrates automatic code generation, Gin and GRPC. Sponge has a rich set of code generation commands, and the generated different functional codes can be combined into a complete service (similar to how artificially broken sponge cells can automatically reassemble into a new complete sponge). From development, testing, API documentation to deployment, one-stop project development greatly improves development efficiency and reduces development difficulty, implementation of "low-code way" development projects.


If you are develop web service or microservice with CRUD APIs, you don't need to write any Go code can be compiled and deployed to the linux server, docker, k8s, just need to connect to the database (mysql、mongodb、postgresql、tidb、sqlite) to generate a complete backend service Go code.

If you develop generic web or microservices, just focus on the three core parts of define tables in the database, define api description information in the proto files, fill in business logic code in the generated template files, and the rest of the Go code is automatically generated by sponge.


Sponge Generates the Code Framework

Sponge is mainly based on SQL and Protobuf two ways to generate code, each way has to generate code for different functions. SQL supports databases mysql, mongodb, postgresql, tidb, sqlite.

Generate Code Framework


Generate Code Framework Corresponding UI Interface


Microservice framework

Sponge is also a microservices framework, the framework diagram is shown below, which is a typical microservice hierarchical structure, with high performance, high scalability, contains commonly used service governance features, you can easily replace or add their own service governance features.


Performance testing of http and grpc service code created by the microservices framework: 50 concurrent, 1 million total requests.

http-server

grpc-server

Click to view the test code.


Key Features


Project Code Directory Structure

The project code directory structure created by sponge follows the project-layout and is structured as follows. Supported repository types are monolithic application single repository (monolith), microservice multi-repository (multi-repo), microservice single repository (mono-repo).

.
├── api            # Directory for exposing external API interfaces, typically containing proto files and generated *.pb.go files. The directory structure is typically in the form `api/xxx/v1`, where v1 indicates the version.
├── assets         # Store various static resources, such as images, markdown files, etc.
├── cmd            # Program entry directory
│    └── serviceName
│         ├── initial     # Program initialization, consisting of three files: initApp initializes configurations, registerServers registers services (HTTP or grpc), and registerClose registers resource cleanup.
│         └── main.go     # Program entry file
├── configs        # Directory for configuration files
├── deployments    # Directory for deployment scripts, supporting Bare Metal, Docker and Kubernetes deployments.
├─ docs            # Directory for API interface Swagger documentation.
├── i(I)nternal       # Directory for business logic code, if the first letter is lowercase (internal), it means private code, if the first letter is capitalised (Internal), it means it can be reused by other code.
│    ├── cache        # Cache directory wrapped around business logic.
│    ├── config       # Directory for Go structure configuration files.
│    ├── dao          # Data access directory.
│    ├── ecode        # Directory for system error codes and custom business error codes.
│    ├── handler      # Directory for implementing HTTP business functionality (specific to web services).
│    ├── model        # Database model directory.
│    ├── routers      # HTTP routing directory.
│    ├── rpcclient    # Directory for client-side code that connects to grpc services.
│    ├── server       # Directory for creating services, including HTTP and grpc.
│    ├── service      # Directory for implementing grpc business functionality (specific to grpc services).
│    └── types        # Directory for defining request and response parameter structures for HTTP.
├── pkg            # Directory for shared libraries.
├── scripts        # Directory for scripts, including compilation, execution, code generation, and deployment scripts.
├── test           # Directory for scripts required for testing services  and test SQL.
└── third_party    # Directory for external helper programs, forked code, and other third-party tools.

Quick start

Installation sponge

Sponge can be installed on Windows, macOS, Linux and Docker environments. Click here for instructions on installing sponge.

Starting UI service

After installing the sponge, start the UI service:

sponge run

Access http://localhost:24631 in a local browser and manipulate the generated code on the UI page.

If you want to access it on a cross-host browser, you need to specify the host ip or domain name when starting the UI, example sponge run -a http://your_host_ip:24631. It is also possible to start the UI service on docker to support cross-host access, Click for instructions on starting the sponge UI service in docker.


Sponge Development Documentation

Detailed instructions for operating, configuring, and deploying a project using sponge development, Click here to view the sponge development documentation


Examples of use

Examples of create services
Examples of develop complete project
Distributed transaction examples

License

See the LICENSE file for licensing information.



If it's help to you, give it a star ⭐.


Documentation

Overview

Package sponge is a powerful Go development framework, it's easy to develop web and microservice projects. repo: https://github.com/zhufuyi/sponge docs: https://go-sponge.com

Usage: sponge [command]

Available Commands: completion Generate the autocompletion script for the specified shell config Generate go config code from yaml file configmap Generate k8s configmap help Help about any command init Initialize sponge merge Merge the generated code into the template file micro Generate protobuf, model, cache, dao, service, grpc, grpc+http, grpc-gw, grpc-cli code patch Command set for patching service code plugins Managing sponge dependency plugins run Open the sponge UI interface upgrade Upgrade sponge version web Generate model, cache, dao, handler, http code

Flags: -h, --help help for sponge -v, --version version for sponge

Use "sponge [command] --help" for more information about a command.

Directories

Path Synopsis
api
cmd
protoc-gen-go-gin
Package main is to generate *.go(tmpl), *_router.go, *_http.go, *_router.pb.go,files.
Package main is to generate *.go(tmpl), *_router.go, *_http.go, *_router.pb.go,files.
protoc-gen-go-gin/internal/generate/handler
Package handler is to generate template code, router code, and error code.
Package handler is to generate template code, router code, and error code.
protoc-gen-go-gin/internal/generate/router
Package router is to generate gin router code.
Package router is to generate gin router code.
protoc-gen-go-gin/internal/generate/service
Package service is to generate template code, router code, and error code.
Package service is to generate template code, router code, and error code.
protoc-gen-go-gin/internal/parse
Package parse is parsed proto file to struct
Package parse is parsed proto file to struct
protoc-gen-go-rpc-tmpl
Package main is to generate *.go(tmpl), *_client_test.go, *_rpc.go files.
Package main is to generate *.go(tmpl), *_client_test.go, *_rpc.go files.
protoc-gen-go-rpc-tmpl/internal/generate/service
Package service is to generate template code, test code, and error code.
Package service is to generate template code, test code, and error code.
protoc-gen-go-rpc-tmpl/internal/parse
Package parse is parsed proto file to struct
Package parse is parsed proto file to struct
serverNameExample_grpcExample
Package main is the grpc server of the application.
Package main is the grpc server of the application.
serverNameExample_grpcExample/initial
Package initial is the package that starts the service to initialize the service, including the initialization configuration, service configuration, connecting to the database, and resource release needed when shutting down the service.
Package initial is the package that starts the service to initialize the service, including the initialization configuration, service configuration, connecting to the database, and resource release needed when shutting down the service.
serverNameExample_grpcGwPbExample
Package main is the grpc gateway server of the application.
Package main is the grpc gateway server of the application.
serverNameExample_grpcGwPbExample/initial
Package initial is the package that starts the service to initialize the service, including the initialization configuration, service configuration, connecting to the database, and resource release needed when shutting down the service.
Package initial is the package that starts the service to initialize the service, including the initialization configuration, service configuration, connecting to the database, and resource release needed when shutting down the service.
serverNameExample_grpcHttpPbExample
Package main is the http and grpc server of the application.
Package main is the http and grpc server of the application.
serverNameExample_grpcHttpPbExample/initial
Package initial is the package that starts the service to initialize the service, including the initialization configuration, service configuration, connecting to the database, and resource release needed when shutting down the service.
Package initial is the package that starts the service to initialize the service, including the initialization configuration, service configuration, connecting to the database, and resource release needed when shutting down the service.
serverNameExample_grpcPbExample
Package main is the grpc server of the application.
Package main is the grpc server of the application.
serverNameExample_grpcPbExample/initial
Package initial is the package that starts the service to initialize the service, including the initialization configuration, service configuration, connecting to the database, and resource release needed when shutting down the service.
Package initial is the package that starts the service to initialize the service, including the initialization configuration, service configuration, connecting to the database, and resource release needed when shutting down the service.
serverNameExample_httpExample
Package main is the http server of the application.
Package main is the http server of the application.
serverNameExample_httpExample/initial
Package initial is the package that starts the service to initialize the service, including the initialization configuration, service configuration, connecting to the database, and resource release needed when shutting down the service.
Package initial is the package that starts the service to initialize the service, including the initialization configuration, service configuration, connecting to the database, and resource release needed when shutting down the service.
serverNameExample_httpPbExample
Package main is the http server of the application.
Package main is the http server of the application.
serverNameExample_httpPbExample/initial
Package initial is the package that starts the service to initialize the service, including the initialization configuration, service configuration, connecting to the database, and resource release needed when shutting down the service.
Package initial is the package that starts the service to initialize the service, including the initialization configuration, service configuration, connecting to the database, and resource release needed when shutting down the service.
serverNameExample_mixExample
Package main is the http and grpc server of the application.
Package main is the http and grpc server of the application.
serverNameExample_mixExample/initial
Package initial is the package that starts the service to initialize the service, including the initialization configuration, service configuration, connecting to the database, and resource release needed when shutting down the service.
Package initial is the package that starts the service to initialize the service, including the initialization configuration, service configuration, connecting to the database, and resource release needed when shutting down the service.
sponge
Package main sponge is a basic development framework that integrates code auto generation, Gin and GRPC, a microservice framework.
Package main sponge is a basic development framework that integrates code auto generation, Gin and GRPC, a microservice framework.
sponge/commands
Package commands are subcommands of the sponge command.
Package commands are subcommands of the sponge command.
sponge/commands/generate
Package generate is to generate code, including model, cache, dao, handler, http, service, grpc, grpc-gw, grpc-cli code.
Package generate is to generate code, including model, cache, dao, handler, http, service, grpc, grpc-gw, grpc-cli code.
sponge/commands/merge
Package merge is merge the generated code into the template file, you don't worry about it affecting the logic code you have already written, in case of accidents, you can find the pre-merge code in the directory /tmp/sponge_merge_backup_code
Package merge is merge the generated code into the template file, you don't worry about it affecting the logic code you have already written, in case of accidents, you can find the pre-merge code in the directory /tmp/sponge_merge_backup_code
sponge/commands/patch
Package patch is command set for patching service code.
Package patch is command set for patching service code.
sponge/server
Package server is a sponge UI service that contains the front-end pages.
Package server is a sponge UI service that contains the front-end pages.
Package configs used to locate config file.
Package configs used to locate config file.
internal
cache
Package cache is a package that unifies the definition of caching, supporting both redis and local caching.
Package cache is a package that unifies the definition of caching, supporting both redis and local caching.
dao
Package dao is the data access object, the code for database operation is unified here.
Package dao is the data access object, the code for database operation is unified here.
ecode
Package ecode is the package that unifies the definition of http error codes or grpc error codes here.
Package ecode is the package that unifies the definition of http error codes or grpc error codes here.
handler
Package handler is a package of http request processing business logic.
Package handler is a package of http request processing business logic.
model
Package model is the initial database driver and define the data structures corresponding to the tables.
Package model is the initial database driver and define the data structures corresponding to the tables.
routers
Package routers is a package dedicated to registering routes, and supports both manual route registration and automatic route registration.
Package routers is a package dedicated to registering routes, and supports both manual route registration and automatic route registration.
rpcclient
Package rpcclient is the rpc client package, used to connect to grpc server, rich plugin support by default, such as service discovery, load balancing, link tracking and so on.
Package rpcclient is the rpc client package, used to connect to grpc server, rich plugin support by default, such as service discovery, load balancing, link tracking and so on.
server
Package server is a package that holds the http or grpc service.
Package server is a package that holds the http or grpc service.
service
Package service A grpc server-side or client-side package that handles business logic.
Package service A grpc server-side or client-side package that handles business logic.
types
Package types define the structure of request parameters and respond results in this package
Package types define the structure of request parameters and respond results in this package
pkg
app
Package app is starting and stopping services gracefully, using golang.org/x/sync/errgroup to ensure that multiple services are started properly at the same time.
Package app is starting and stopping services gracefully, using golang.org/x/sync/errgroup to ensure that multiple services are started properly at the same time.
cache
Package cache is memory and redis cache libraries.
Package cache is memory and redis cache libraries.
conf
Package conf is parsing yaml, json, toml configuration files to go struct.
Package conf is parsing yaml, json, toml configuration files to go struct.
consulcli
Package consulcli is connecting to the consul service client.
Package consulcli is connecting to the consul service client.
container/group
Package group provides a sample lazy load container.
Package group provides a sample lazy load container.
encoding
Package encoding Provides encoding and decoding of json, protobuf and gob.
Package encoding Provides encoding and decoding of json, protobuf and gob.
encoding/json
Package json is a JSON encoding and decoding.
Package json is a JSON encoding and decoding.
encoding/proto
Package proto is a protobuf encoding and decoding.
Package proto is a protobuf encoding and decoding.
errcode
Package errcode is used for http and grpc error codes, include system-level error codes and business-level error codes
Package errcode is used for http and grpc error codes, include system-level error codes and business-level error codes
etcdcli
Package etcdcli is use for connecting to the etcd service
Package etcdcli is use for connecting to the etcd service
ggorm
Package ggorm is a library wrapped on top of gorm.io/gorm, with added features such as link tracing, paging queries, etc.
Package ggorm is a library wrapped on top of gorm.io/gorm, with added features such as link tracing, paging queries, etc.
ggorm/query
Package query is a library of custom condition queries, support for complex conditional paging queries.
Package query is a library of custom condition queries, support for complex conditional paging queries.
gin/frontend
Package frontend embeds the frontend static file and adds routing.
Package frontend embeds the frontend static file and adds routing.
gin/handlerfunc
Package handlerfunc is used for public http request handler.
Package handlerfunc is used for public http request handler.
gin/middleware
Package middleware is gin middleware plugin.
Package middleware is gin middleware plugin.
gin/middleware/metrics
Package metrics is gin metrics library, collect five metrics, "uptime", "http_request_count_total", "http_request_duration_seconds", "http_request_size_bytes", "http_response_size_bytes".
Package metrics is gin metrics library, collect five metrics, "uptime", "http_request_count_total", "http_request_duration_seconds", "http_request_size_bytes", "http_response_size_bytes".
gin/prof
Package prof is used for gin profiling.
Package prof is used for gin profiling.
gin/response
Package response provides wrapper gin returns json data in the same format.
Package response provides wrapper gin returns json data in the same format.
gin/swagger
Package swagger is gin swagger library.
Package swagger is gin swagger library.
gin/validator
Package validator is gin request parameter check library.
Package validator is gin request parameter check library.
gobash
Package gobash provides the ability to execute commands, scripts, executables in the go environment with live log output.
Package gobash provides the ability to execute commands, scripts, executables in the go environment with live log output.
gocron
Package gocron is scheduled task library.
Package gocron is scheduled task library.
gocrypto
Package gocrypto is commonly used one-way encryption, symmetric encryption and decryption, asymmetric encryption and decryption libraries, including hash, aes, des, rsa.
Package gocrypto is commonly used one-way encryption, symmetric encryption and decryption, asymmetric encryption and decryption libraries, including hash, aes, des, rsa.
gocrypto/wcipher
Package wcipher is a package to encrypt and decrypt data.
Package wcipher is a package to encrypt and decrypt data.
gofile
Package gofile is file and directory management libraries.
Package gofile is file and directory management libraries.
gohttp
Package gohttp is http request client, which only supports returning json format.
Package gohttp is http request client, which only supports returning json format.
goredis
Package goredis is a library wrapped on top of github.com/go-redis/redis.
Package goredis is a library wrapped on top of github.com/go-redis/redis.
gotest
Package gotest is a library that simulates the testing of cache, dao and handler.
Package gotest is a library that simulates the testing of cache, dao and handler.
grpc/benchmark
Package benchmark is compression testing of rpc methods and generation of reported results.
Package benchmark is compression testing of rpc methods and generation of reported results.
grpc/client
Package client is generic grpc client-side.
Package client is generic grpc client-side.
grpc/grpccli
Package grpccli is grpc client with support for service discovery, logging, load balancing, trace, metrics, retries, circuit breaker.
Package grpccli is grpc client with support for service discovery, logging, load balancing, trace, metrics, retries, circuit breaker.
grpc/gtls
Package gtls provides grpc secure connectivity, supporting both server-only authentication and client-server authentication.
Package gtls provides grpc secure connectivity, supporting both server-only authentication and client-server authentication.
grpc/gtls/certfile
Package certfile is used to locate the certificate file.
Package certfile is used to locate the certificate file.
grpc/interceptor
Package interceptor provides commonly used grpc client-side and server-side interceptors.
Package interceptor provides commonly used grpc client-side and server-side interceptors.
grpc/keepalive
Package keepalive is setting grpc keepalive parameters.
Package keepalive is setting grpc keepalive parameters.
grpc/metrics
Package metrics is grpc's server-side and client-side metrics can continue to be captured using prometheus.
Package metrics is grpc's server-side and client-side metrics can continue to be captured using prometheus.
grpc/resolve
Package resolve is setting grpc client-side load balancing policy.
Package resolve is setting grpc client-side load balancing policy.
grpc/server
Package server is generic grpc server-side.
Package server is generic grpc server-side.
jwt
Package jwt is token generation and validation.
Package jwt is token generation and validation.
jy2struct
Package jy2struct is a library for generating go struct code, supporting json and yaml.
Package jy2struct is a library for generating go struct code, supporting json and yaml.
krand
Package krand is a library for generating random strings, integers, floating point numbers.
Package krand is a library for generating random strings, integers, floating point numbers.
logger
Package logger is log library encapsulated in https://github.com/uber-go/zap
Package logger is log library encapsulated in https://github.com/uber-go/zap
mgo
Package mgo is a library wrapped on go.mongodb.org/mongo-driver/mongo, with added features paging queries, etc.
Package mgo is a library wrapped on go.mongodb.org/mongo-driver/mongo, with added features paging queries, etc.
mgo/query
Package query is a library of custom condition queries, support for complex conditional paging queries.
Package query is a library of custom condition queries, support for complex conditional paging queries.
mysql
Package mysql is a library wrapped on top of gorm.io/gorm, with added features such as link tracing, paging queries, etc.
Package mysql is a library wrapped on top of gorm.io/gorm, with added features such as link tracing, paging queries, etc.
mysql/query
Package query is a library for mysql query, support for complex conditional paging queries.
Package query is a library for mysql query, support for complex conditional paging queries.
nacoscli
Package nacoscli provides for getting the configuration from the nacos configuration center and parse it into a structure.
Package nacoscli provides for getting the configuration from the nacos configuration center and parse it into a structure.
prof
Package prof is wrap the official `net/http/pprof` route and add the profile io wait time route.
Package prof is wrap the official `net/http/pprof` route and add the profile io wait time route.
rabbitmq
Package rabbitmq is a go wrapper for github.com/rabbitmq/amqp091-go
Package rabbitmq is a go wrapper for github.com/rabbitmq/amqp091-go
replacer
Package replacer is a library of replacement file content, supports replacement of files in local directories and embedded directory files via embed.
Package replacer is a library of replacement file content, supports replacement of files in local directories and embedded directory files via embed.
servicerd/discovery
Package discovery is service discovery library, supports etcd, consul and nacos.
Package discovery is service discovery library, supports etcd, consul and nacos.
servicerd/registry
Package registry is service registry library, supports etcd, consul and nacos.
Package registry is service registry library, supports etcd, consul and nacos.
servicerd/registry/consul
Package consul is registered as a service using consul.
Package consul is registered as a service using consul.
servicerd/registry/etcd
Package etcd is registered as a service using etcd.
Package etcd is registered as a service using etcd.
servicerd/registry/nacos
Package nacos is registered as a service using nacos.
Package nacos is registered as a service using nacos.
shield/circuitbreaker
Package circuitbreaker is an adaptive circuit breaker library, support for use in gin middleware and grpc interceptors.
Package circuitbreaker is an adaptive circuit breaker library, support for use in gin middleware and grpc interceptors.
shield/cpu
Package cpu is a library that calculates cpu and memory usage.
Package cpu is a library that calculates cpu and memory usage.
shield/ratelimit
Package ratelimit is an adaptive rate limit library, support for use in gin middleware and grpc interceptors.
Package ratelimit is an adaptive rate limit library, support for use in gin middleware and grpc interceptors.
shield/window
Package window is a library that calculates windows cpu and memory usage.
Package window is a library that calculates windows cpu and memory usage.
sql2code
Package sql2code provides for generating code for different purposes according to sql, support generating json, gorm model, update parameter, request parameter code, sql can be obtained from parameter, file, db three ways, priority from high to low.
Package sql2code provides for generating code for different purposes according to sql, support generating json, gorm model, update parameter, request parameter code, sql can be obtained from parameter, file, db three ways, priority from high to low.
sql2code/parser
Package parser is a library that parses to go structures based on sql and generates the code needed based on the template.
Package parser is a library that parses to go structures based on sql and generates the code needed based on the template.
stat
Package stat provides for counting system and process cpu and memory information, alarm notification support.
Package stat provides for counting system and process cpu and memory information, alarm notification support.
stat/cpu
Package cpu is a library that counts system and process cpu usage.
Package cpu is a library that counts system and process cpu usage.
stat/mem
Package mem is a library that counts system and process memory usage.
Package mem is a library that counts system and process memory usage.
tracer
Package tracer is a library wrapped in go.opentelemetry.io/otel.
Package tracer is a library wrapped in go.opentelemetry.io/otel.
utils
Package utils is a library of commonly used utility functions.
Package utils is a library of commonly used utility functions.

Jump to

Keyboard shortcuts

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