| description | project-architecture |
| name | project-architecture |
| user_invocable | false |
Project Architecture
Project Architecture
Package Structure
go-utils is organized into specialized utility packages, each focused on a specific data type:
go-utils/
├── dateutils/ # Time and date manipulation utilities
├── maputils/ # Generic map operations
├── sliceutils/ # Generic slice operations (inspired by JS Array methods)
├── stringutils/ # String manipulation and formatting
├── structutils/ # Struct reflection and conversion utilities
└── urlutils/ # URL and query string utilities
Design Principles
1. Generics-First Approach
All functions leverage Go 1.18+ generics for type safety:
func Filter[T any](slice []T, predicate func(value T, index int, slice []T) bool) []T
func Keys[K comparable, V any](mapInstance map[K]V) []K
2. Functional Programming Style
Many functions accept callback functions with consistent signatures:
sliceutils.Map(items, func(value T, index int, slice []T) R { ... })
maputils.ForEach(m, func(key K, value V) { ... })
3. Zero-Cost Abstractions
Functions are designed for performance with minimal overhead:
- Pre-allocated slices where sizes are known
- In-place operations where appropriate
- Efficient iteration patterns
Adding New Utilities
When contributing a new utility function:
- Choose the correct package based on the primary data type
- Add the function to
<package>/<package>.go
- Add comprehensive tests to
<package>/<package>_test.go
- Create documentation at
docs/<package>/<function>.md following existing patterns
- Update mkdocs.yml to include the new documentation page
Documentation Generation
Documentation is built with MkDocs and deployed automatically:
pip install mkdocs mkdocs-material
mkdocs serve
mkdocs build
Documentation structure in mkdocs.yml mirrors the package structure for easy navigation.