Comments (9)
I was thinking about custom context types:
ctx := &MyCustomAppContext{} // implements context.Context interface
router := chi.NewRouter(ctx)
func Handler(w http.ResponseWriter, r *http.Request) {
ctx := r.Context().(*MyCustomAppContext)
// I can use custom methods/helpers defined on the *MyCustomAppContext type now..
// this means... saving a lot of boiler plate and type conversions
sessionUser := ctx.SessionUser()
session := ctx.Session() // instead of session, ok := ctx.Value("session").(*Session)
db := ctx.DBSession() // DB connection assigned from a middleware?
w.Write([]byte("yay"))
}
from chi.
@cyx yea I've gone back and forth with this one myself. I've implemented it, then removed it, then thought perhaps we should bring it back.
can you describe your use case for a base context? what would you use it for?
from chi.
For our usecase, the most important part is cancellation.
ctx, cancel := context.WithCancel(context.Background())
graceful.AddSignal(syscall.SIGTERM)
graceful.PostHook(cancel)
// more code here that adds on to context.
FWIW we were originally using github.com/guregu/kami. We definitely love a working PR we have moving to chi, and this is the only piece that felt weird to me TBH.
from chi.
@cyx that isn't actually a reliable solution to a graceful shutdown of your servers. A cancelation signal will cancel all in-process goroutines. What is actually necessary is a signal on the context that tells the listeners to stop any further processing, but to finish up their work. See #58
from chi.
@cyx let me know if you get any success or some other ideas on how to approach it though
from chi.
@pkieltyka do you sit in any irc / slack channel? Would be interested to talk about this in detail.
from chi.
@cyx id love to get into it, but I'm under a pile of work onboarding a bunch of customers this week
from chi.
btw, here is a PR to add this functionality #92
I'll be adding a _examples/graceful example too to this PR that uses the new https://github.com/goware/valve package to manage graceful shutdowns, utilizing a base context
from chi.
done in a526d0c
from chi.
Related Issues (20)
- Panic if rctx is nil HOT 1
- runtime: goroutine stack exceeds 1000000000-byte limit while serving HTTP HOT 2
- Undefined Route Request Leads to Infinite Loop in route matching HOT 6
- How to test if a request path matches the pattern using chi router HOT 1
- chi.RouteContext(r.Context()).RoutePattern() returns ""
- Mount isn't compositing the route patterns HOT 1
- Unexpected Group behaviour HOT 1
- Can we log panics in one line? HOT 1
- log/slog's LogAttrs (and other methods) now requires a context as their first argument HOT 3
- Brotli compression not working
- Feature: Expose Context.methodsAllowed for use by MethodNotAllowedHandler
- Feature: on Go 1.22, fill `(*http.Request).PathValue` with URLParam data HOT 5
- Incorrect Route Matching Comment in chi.go
- [Doubt] Do you support i18n? HOT 4
- Possible bug can lead to security issue HOT 4
- URL params are not available inside middleware on the root router HOT 3
- Is jwtauth to validate jwt ? or can I create new jwt tokens using jwtauth? HOT 1
- Feature: on Go 1.22 pattern can start with an optional HTTP Method HOT 5
- bug: HandlerFunc does not support HTTP methods in patterns like #897
- Huma not respecting API Gateway path? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from chi.