https://github.com/spy16/moonshot
🌔 A boilerplate Go library for quickly setting up backend for your next moonshot idea!
https://github.com/spy16/moonshot
api-rest go-api golang
Last synced: 4 months ago
JSON representation
🌔 A boilerplate Go library for quickly setting up backend for your next moonshot idea!
- Host: GitHub
- URL: https://github.com/spy16/moonshot
- Owner: spy16
- License: mit
- Created: 2022-07-05T06:42:36.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-01-06T15:34:00.000Z (about 3 years ago)
- Last Synced: 2023-07-27T22:38:32.323Z (over 2 years ago)
- Topics: api-rest, go-api, golang
- Language: Go
- Homepage:
- Size: 62.5 KB
- Stars: 4
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 🌔 Moonshot
**NOTICE**: I wanted to grow this project to a customisable Firebase/Supabase alternative. But I think the smart folks at https://pocketbase.io/ nailed it!. So I would highly recommend trying that out.
A boilerplate Go library for quickly setting up your next moonshot idea!
## Features
* ⚙️ Config management
* Create struct, pass its pointer to `moonshot.App`.
* Moonshot will take care of loading configs from environment/files.
* File can be overriden by `--config` flag also.
* You can run `./myapp configs` to see the actual loaded configs.
* 🌍 HTTP Server setup
* HTTP server is pre-configured with graceful shutdown enabled.
* Server is pre-configured with handlers for `/health`, NotFound, MethodNotAllowed.
* Panic recovery is enabled.
* You can set the `Routes` field in `moonshot.App` to add custom routes or override.
* 🗃️ Static File Server
* Pass `--staic-dir` & `--static-route` flags to serve static files on the HTTP server.
* This can be used to serve front-end app or static assets for your frontend.
* 🗒️ Logging
* `log` package is automatically configured based on `--log-level` and `--log-format` flags.
* Pass log-context using `log.Inject(ctx, fields)`
* ❌ Errors package
* An easy-to-use errors package with common category of errors pre-defined.
* Just do `errors.ErrInvalid.WithMsgf()` or `WithCausef()` to add additional context.
> Refer `./_example` for a demo application.
## Usage
1. Create `main.go`.
2. Initiailise `moonshot.App`:
```go
package main
import "github.com/spy16/moonshot"
var myConfig struct {
Database string `mapstructure:"database"`
}
func main() {
app := moonshot.App{
Name: "myapp",
Short: "MyApp does cool things",
CfgPtr: &myConfig,
Routes: func(r *chi.Mux) {
r.Get("/", myAppHomePageHandler)
},
}
os.Exit(app.Launch())
}
```
3. Build the app `go build -o myapp main.go`
4. Run the app:
```shell
$ ./myapp --help
MyApp does cool things
Usage:
myapp [command]
Available Commands:
configs Show currently loaded configurations
help Help about any command
serve Start HTTP server.
Flags:
-c, --config string Config file path override
-h, --help help for moonshot-demo
Use "moonshot-demo [command] --help" for more information about a command.
```
* You can run `./myapp serve --addr="localhost:8080"` for starting server.