# Packages
# README
go-parameters
Parameter multi-tool that parses json, msg pack, or multipart form data into a parameter object.
CI / CD | Quality & Security | Docs & Meta | Community |
---|---|---|---|
|
|
|
|
Table of Contents
- Installation
- Documentation
- Examples & Tests
- Benchmarks
- Code Standards
- AI Compliance
- Maintainers
- Contributing
- License
Installation
go-parameters requires a supported release of Go.
go get -u github.com/mrz1836/go-parameters
Documentation
View the generated documentation
Features
- This package uses the fastest router: Julien Schmidt's httprouter
- Works with
json
,msgpack
, andmulti-part
forms - Handles all standard types for
GetParams
- Handler methods like
MakeParsedReq()
forhttprouter
use Imbue
andPermit
helper methodsGetParams()
parses parameters only once
Development Setup (Getting Started)
Install MAGE-X build tool for development:
# Install MAGE-X for development and building
go install github.com/mrz1836/mage-x/cmd/magex@latest
magex update:install
Library Deployment
This project uses goreleaser for streamlined binary and library deployment to GitHub. To get started, install it via:
brew install goreleaser
The release process is defined in the .goreleaser.yml configuration file.
Then create and push a new Git tag using:
magex version:bump bump=patch push
This process ensures consistent, repeatable releases with properly versioned artifacts and citation metadata.
Build Commands
View all build commands
magex help
GitHub Workflows
🎛️ The Workflow Control Center
All GitHub Actions workflows in this repository are powered by configuration files: .env.base (default configuration) and optionally .env.custom (project-specific overrides) – your one-stop shop for tweaking CI/CD behavior without touching a single YAML file! 🎯
Configuration Files:
- .env.base – Default configuration that works for most Go projects
- .env.custom – Optional project-specific overrides
This magical file controls everything from:
- 🚀 Go version matrix (test on multiple versions or just one)
- 🏃 Runner selection (Ubuntu or macOS, your wallet decides)
- 🔬 Feature toggles (coverage, fuzzing, linting, race detection, benchmarks)
- 🛡️ Security tool versions (gitleaks, nancy, govulncheck)
- 🤖 Auto-merge behaviors (how aggressive should the bots be?)
- 🏷️ PR management rules (size labels, auto-assignment, welcome messages)
Pro tip: Want to disable code coverage? Just add
ENABLE_CODE_COVERAGE=false
to your .env.custom to override the default in .env.base and push. No YAML archaeology required!
Workflow Name | Description |
---|---|
auto-merge-on-approval.yml | Automatically merges PRs after approval and all required checks, following strict rules. |
codeql-analysis.yml | Analyzes code for security vulnerabilities using GitHub CodeQL. |
dependabot-auto-merge.yml | Automatically merges Dependabot PRs that meet all requirements. |
fortress.yml | Runs the GoFortress security and testing workflow, including linting, testing, releasing, and vulnerability checks. |
pull-request-management.yml | Labels PRs by branch prefix, assigns a default user if none is assigned, and welcomes new contributors with a comment. |
scorecard.yml | Runs OpenSSF Scorecard to assess supply chain security. |
stale.yml | Warns about (and optionally closes) inactive issues and PRs on a schedule or manual trigger. |
sync-labels.yml | Keeps GitHub labels in sync with the declarative manifest at .github/labels.yml . |
Updating Dependencies
To update all dependencies (Go modules, linters, and related tools), run:
magex deps:update
This command ensures all dependencies are brought up to date in a single step, including Go modules and any managed tools. It is the recommended way to keep your development environment and CI in sync with the latest versions.
Examples & Tests
All unit tests and examples run via GitHub Actions and use Go version 1.24.x. View the configuration file.
Run all tests (fast):
magex test
Run all tests with race detector (slower):
magex test:race
Benchmarks
The following benchmarks were conducted to measure the performance of various functions in the github.com/mrz1836/go-parameters
package. All tests were run on a machine with the following specifications:
- Operating System: macOS (Darwin)
- Architecture: ARM64
- CPU: Apple M1 Max
Benchmark Results
View the latest benchmark results
Benchmark | Iterations | ns/op | B/op | allocs/op |
---|---|---|---|---|
UniqueUint64 | 13,989,841 | 84.49 ns | 64 B | 1 |
GetParams_ParseJSONBody | 209,700,817 | 5.721 ns | 0 B | 0 |
GetParams | 209,668,894 | 5.719 ns | 0 B | 0 |
Params_GetStringOk | 37,573,434 | 31.96 ns | 16 B | 1 |
Params_GetBoolOk | 36,349,316 | 33.15 ns | 16 B | 1 |
Params_GetBytesOk | 38,539,616 | 31.52 ns | 16 B | 1 |
Params_GetBool | 35,637,433 | 32.57 ns | 16 B | 1 |
Params_GetFloatOk | 22,064,586 | 54.69 ns | 16 B | 1 |
Params_GetIntOk | 28,992,304 | 41.78 ns | 16 B | 1 |
Params_GetInt64Ok | 28,752,844 | 41.77 ns | 16 B | 1 |
Params_GetIntSliceOk | 38,099,671 | 31.59 ns | 16 B | 1 |
Params_GetUint64Ok | 29,921,580 | 39.68 ns | 16 B | 1 |
Benchmark Details
UniqueUint64
: Measures the performance of generating uniqueuint64
values.GetParams_ParseJSONBody
: Benchmarks parsing a JSON body into parameters.GetParams
: Tests retrieving parameters without parsing.Params_GetStringOk
: Evaluates fetching a string parameter with success indication.Params_GetBoolOk
: Assesses fetching a boolean parameter with success indication.Params_GetBytesOk
: Measures retrieving a byte slice parameter with success indication.Params_GetBool
: Benchmarks fetching a boolean parameter without success indication.Params_GetFloatOk
: Tests fetching a float parameter with success indication.Params_GetIntOk
: Evaluates fetching an integer parameter with success indication.Params_GetInt64Ok
: Measures fetching a 64-bit integer parameter with success indication.Params_GetIntSliceOk
: Benchmarks retrieving a slice of integers with success indication.Params_GetUint64Ok
: Tests fetching an unsigned 64-bit integer parameter with success indication.
Benchmark Notes
- Iterations: The number of times the benchmark function was executed.
- ns/op: Nanoseconds per operation, indicating the average time taken for each operation.
- B/op: Bytes allocated per operation, showing the memory usage.
- allocs/op: Allocations per operation, indicating how many memory allocations occurred per operation.
How to Run Benchmarks
Run the Go benchmarks:
magex bench
Code Standards
Read more about this Go project's code standards.
AI Compliance
This project documents expectations for AI assistants using a few dedicated files:
- AGENTS.md — canonical rules for coding style, workflows, and pull requests used by Codex.
- CLAUDE.md — quick checklist for the Claude agent.
- .cursorrules — machine-readable subset of the policies for Cursor and similar tools.
- sweep.yaml — rules for Sweep, a tool for code review and pull request management.
Edit AGENTS.md
first when adjusting these policies, and keep the other files in sync within the same pull request.
Maintainers
![]() | ![]() |
---|---|
MrZ | kayleg |
Contributing
View the contributing guidelines and please follow the code of conduct.
How can I help?
All kinds of contributions are welcome :raised_hands:! The most basic way to show your support is to star :star2: the project, or to raise issues :speech_balloon:. You can also support this project by becoming a sponsor on GitHub :clap: or by making a bitcoin donation to ensure this journey continues indefinitely! :rocket: