Skip to content

Instantly share code, notes, and snippets.

@podhmo
Created June 29, 2022 05:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save podhmo/7deb69f0c64a247867c56cf8ed48cc35 to your computer and use it in GitHub Desktop.
Save podhmo/7deb69f0c64a247867c56cf8ed48cc35 to your computer and use it in GitHub Desktop.
package main
import "net/http"
type DB struct{}
type JobQueue struct{}
type ProviderA interface {
DB() *DB
JobQueue() *JobQueue
}
func mountA[P ProviderA](router *http.ServeMux, getProvider func() P) {
router.Handle("/foo", Foo(getProvider))
}
func Foo[P ProviderA](getProvider func() P) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
})
}
type ProviderB interface {
AnotherDB() *DB
JobQueue() *JobQueue
}
func mountB[P ProviderB](router *http.ServeMux, getProvider func() P) {
router.Handle("/bar", Bar(getProvider))
}
func Bar[P ProviderB](getProvider func() P) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
})
}
func main() {
type provider interface {
ProviderA
ProviderB
}
getProvider := func() provider {return nil}
router := &http.ServeMux{}
mountA(router, getProvider)
mountB(router, getProvider)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment