goserve is a Go library designed to simplify the creation of backend applications or services that interact with HTTP
requests. It leverages the powerful gorilla/mux router to provide flexibility, performance, and scalability while
adhering to best practices in server development.
Before using goserve, make sure you have the following installed:
-
Go Programming Language π Install Go β Verify installation:
go version
-
Git (Version Control System) π Install Git β Verify installation:
git --version
-
Environment Setup Add Go binaries to your
PATH:export PATH="$HOME/go/bin:$PATH"
Add this line to your shell configuration file (e.g.,
.bashrc,.zshrc) to persist it. -
oapi-codegen Tool (for OpenAPI/Swagger integration):
go install github.com/deepmap/oapi-codegen/v2/cmd/oapi-codegen@v2.2.0
Install the goserve-generator CLI tool:
go install github.com/softwareplace/goserve/cmd/goserve-generator@latestOr add the library to your Go project:
go get -u github.com/softwareplace/goserveGenerate a new goserve project:
goserve-generator -n <project-name> -u <github-username> [-r true|false] [-gi true|false]| Flag | Description | Required | Default |
|---|---|---|---|
-n |
Name of your project | β Yes | |
-u |
Your GitHub username | β Yes | |
-r |
Force replace existing files | β No | false |
-gi |
Gi project initialization | β No | true |
-cgf |
Template of the codegen config file | β No | |
-gsv |
Use a specific version of goserver | β No | |
version |
Check current version | β No | |
update |
Update to the latest released version | β No |
goserve-generator -n goserve-example -u myuser -r true -gi false- Backend Application Server: Kickstart a backend server with security, role-based access control, and scalable routing.
- Enhanced Security: Built-in support for API key authentication using
private.keyandpublic.key. - Swagger-UI Integration: Built-in OpenAPI docs via
oapi-codegen. - Router Flexibility: Powered by
gorilla/muxfor clean, RESTful routing. - Built-in Middleware: Support for authentication, role-checking, and structured error handling.
| Variable Name | Required? | Default | Description |
|---|---|---|---|
CONTEXT_PATH |
No | / |
Base path for all endpoints |
PORT |
No | 8080 |
Port the server listens on |
API_SECRET_KEY |
Yes* | Used in encryption/authentication | |
API_PRIVATE_KEY |
Yes* | The private.key file path | |
B_CRYPT_COST |
No | 10 |
Cost factor for bcrypt |
LOG_DIR |
No | ./.log |
Where log files are stored |
LOG_APP_NAME |
No | Used in the log file naming | |
LOG_REPORT_CALLER |
No | false |
Enable method name reporting in logs |
LOG_FILE_NAME_DATE_FORMAT |
No | 2006-01-02 |
Date format for log filenames |
JWT_ISSUER |
No | JWT issuer name | |
JWT_CLAIMS_ENCRYPTION_ENABLED |
No | true |
Encrypt claims inside JWT |
SWAGGER_RESURCE_ENABLED |
No | true |
Enable swagger resource |
* Required only if using security.Service
package main
import (
log "github.com/sirupsen/logrus"
"github.com/softwareplace/goserve/internal/handler"
"github.com/softwareplace/goserve/internal/service/apiservice"
"github.com/softwareplace/goserve/internal/service/login"
"github.com/softwareplace/goserve/internal/service/provider"
"github.com/softwareplace/goserve/logger"
"github.com/softwareplace/goserve/security"
"github.com/softwareplace/goserve/security/secret"
"github.com/softwareplace/goserve/server"
)
func init() {
logger.LogSetup()
}
var (
userPrincipalService = login.NewPrincipalService()
securityService = security.New(
userPrincipalService,
)
loginService = login.NewLoginService(securityService)
secretProvider = provider.NewSecretProvider()
secretService = secret.New(
secretProvider,
securityService,
)
)
func main() {
server.Default().
LoginResourceEnabled(true).
SecretKeyGeneratorResourceEnabled(true).
LoginService(loginService).
SecretService(secretService).
SecurityService(securityService).
EmbeddedServer(apiservice.Register).
Get(apiservice.ReportCallerHandler, "/report/caller").
SwaggerDocHandler("./internal/resource/pet-store.yaml").
StartServer()
}To customize code generation:
package: gen
generate:
gorilla-server: true
models: true
output: ./gen/api.gen.go
output-options:
user-templates:
imports.tmpl: https://raw.githubusercontent.com/softwareplace/goserve/refs/heads/main/resource/templates/imports.tmpl
param-types.tmpl: https://raw.githubusercontent.com/softwareplace/goserve/refs/heads/main/resource/templates/param-types.tmpl
request-bodies.tmpl: https://raw.githubusercontent.com/softwareplace/goserve/refs/heads/main/resource/templates/request-bodies.tmpl
typedef.tmpl: https://raw.githubusercontent.com/softwareplace/goserve/refs/heads/main/resource/templates/typedef.tmpl
gorilla/gorilla-register.tmpl: https://raw.githubusercontent.com/softwareplace/goserve/refs/heads/main/resource/templates/gorilla/gorilla-register.tmpl
gorilla/gorilla-middleware.tmpl: https://raw.githubusercontent.com/softwareplace/goserve/refs/heads/main/resource/templates/gorilla/gorilla-middleware.tmpl
gorilla/gorilla-interface.tmpl: https://raw.githubusercontent.com/softwareplace/goserve/refs/heads/main/resource/templates/gorilla/gorilla-interface.tmploapi-codegen --config path/to/config.yaml path/to/swagger.yamlgo run test/main.goOpen http://localhost:8080/swagger/index.html
PROTECTED_API=true go run test/main.goWithout token:
{
"message": "You are not allowed to access this resource",
"statusCode": 401,
"timestamp": 1742781093916
}With valid token:
curl -X GET 'http://localhost:8080/swagger/index.html' \
-H 'accept: application/json' \
-H 'X-Api-Key: <your-jwt-token>'Whether you're building microservices or full-stack applications, goserve provides a clean, secure, and production-ready server foundation. With powerful integrations and easy configuration, goserve helps you focus on building featuresβnot boilerplate.
Open source is more than just code β it's a collaborative effort powered by you! Contributing to goserve means you're joining a community of developers who believe in making software more accessible, secure, and scalable for everyone.
Thank you for being a part of this journey! Together, we create, innovate, and grow. π