EDIT:
Um eine Gruppe von mux.Route
‚s in einem Rutsch zu erstellen, können Sie einen benutzerdefinierten Typen (handler
im Beispiel unten) definieren und tun so etwas wie:
package main
import (
"fmt"
"github.com/gorilla/mux"
"net/http"
)
type handler struct {
path string
f http.HandlerFunc
methods []string
}
func makeHandlers(hs []handler, r *mux.Router) {
for _, h := range hs {
if len(h.methods) == 0 {
r.HandleFunc(h.path, h.f)
} else {
r.HandleFunc(h.path, h.f).Methods(h.methods...)
}
}
}
// create some example handler functions
func somePostHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "POST Handler")
}
func someHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Normal Handler")
}
func main() {
//define some handlers
handlers := []handler{{path: "/", f: somePostHandler, methods: []string{"POST"}}, {path: "/", f: someHandler}}
r := mux.NewRouter()
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("./templates/static/"))))
// Initialise the handlers
makeHandlers(handlers, r)
http.Handle("/", r)
http.ListenAndServe(":8080", nil)
}
Playground
ORIGINAL ANTWORT:
Sie brauchen nicht zu import
sie, wenn sie in th sind e same package.
Sie können die URL-Variablen in urls.go
definieren und dann die Logik in views.go
(oder eine andere Datei in package moduleX
), solange sie die gleiche package
Erklärung haben.
Zum Beispiel:
// moduleX/urls.go
package moduleX
var (
urls = []string{"http://google.com/", "http://stackoverflow.com/"}
)
Dann:
// moduleX/views.go (or some other file in package moduleX)
package moduleX
func GetUrls() []string {
return urls
}
Dann:
// start.go
package main
import (
"fmt"
"myapp/moduleX"
)
func main() {
for _, url := range moduleX.GetUrls() {
fmt.Println(url)
}
}
Oder, noch einfacher, exportiert nur die Variable aus dem moduleX
Paket durch eine aktivierte geben Name.
Zum Beispiel:
// moduleX/urls.go
package moduleX
var URLs = []string{"http://google.com/", "http://stackoverflow.com/"}
und dann:
// start.go
package main
import (
"fmt"
"myapp/moduleX"
)
func main() {
for _, url := range moduleX.URLs {
fmt.Println(url)
}
}
Werfen Sie einen Blick auf any of the Go source to see how they handle the same problem. Ein gutes Beispiel ist the SHA512
source, wo die lange Variable in sha512block.go
gespeichert ist und die Logik in sha512.go
ist.
dass zu stopfen funktioniert und mir ist bewusst, dass dies möglich ist - aber es löst mein Problem nicht direkt. Auch wenn ich alle URLs nach start.go exportieren lasse, wie kann ich mit dem entsprechenden Handler eine Route für sie erstellen? Ich möchte alle HandleFunc() - Sachen in moduleX/urls.go machen und dann diese Router (oder Routes oder HandleFuncs?) In start.go benutzen. Mit einem Modul könnte ich den Router einfach in urls.go definieren und in start.go verwenden, aber mit mehreren Modulen brauche ich eine Möglichkeit, den Router anzuhängen. – Subito
Erstellen Sie eine Karte von URLs zu 'http.HandlerFunc's, dann erstellen Sie eine Funktion, um all diese als 'mux.Route's zu initialisieren? – Intermernet
OK, jetzt habe ich etwas wie folgt aus: 'func GetRoutes() [] {core.Route \t Routen: = [] core.Route { \t \t core.Route {URL: "/ neu /" Handler: NewObjHandler }, \t \t core.Route {URL: "/", Handler: login.LoginFirst (ListObjHandler)}, \t} \t Rückkehr Routen } 'in meinem urls.go und' obj_routes: = obj.GetRoutes() \t s:. = r.PathPrefix ("/ obj /")-Sub() \t für _, route: = range obj_routes { \t \t s.HandleFunc (route.URL, route.Handler) \t} '- was funktioniert, sieht aber hässlich aus. Und ich weiß nicht, wie ich jetzt die .Methods ("POST") von Gorillas mux anwenden kann. – Subito