2015-08-07 1 views
1

Lorsque j'utiliseComment limiter le serveur web écrit en golang pour permettre une adresse particulière au lieu d'un motif?

http.HandleFunc("/", serveRest) //serveRest is the method to handle request 
http.ListenAndServe("localhost:4000", nil) 

Il acceptera toutes les demandes commençant par "/". Comment puis-je le restreindre pour ne servir que "localhost:4000" au lieu de toutes les adresses comme "localhost:4000/*"?

Et pouvez-vous me proposer un bon tutoriel pour Go?

Répondre

6

Le modèle d'URL auquel vous enregistrez vos gestionnaires est décrite dans le type http.ServeMux:

modèles nom fixe, chemins enracinés, comme « /favicon.ico », ou sous-arbres enracinés, comme «/images/"(notez la barre oblique). Les motifs plus longs ont la priorité sur les plus courts, de sorte que s'il y a des gestionnaires enregistrés pour "/ images /" et "/ images/thumbnails /", ce dernier sera appelé pour les chemins commençant par "/ images/thumbnails /" et l'ancien recevra des demandes pour tous les autres chemins dans le sous-arbre "/ images /". Notez que, comme un motif se terminant par une barre oblique nomme un sous-arbre enraciné, le motif "/" correspond à tous les chemins qui ne correspondent pas aux autres motifs enregistrés, pas seulement l'URL avec Path == "/".

Donc, malheureusement, il n'y a pas de modèle qui correspond seulement à la racine ("/").

Mais vous pouvez facilement vérifier dans votre gestionnaire, et faire ce que vous voulez si le chemin de la requête n'est pas la racine:

func serveRest(w http.ResponseWriter, r *http.Request) { 
    if r.URL.Path != "/" { 
     w.Write([]byte("Not root!")) 
     return 
    } 

    w.Write([]byte("Hi, this is the root!")) 
} 

Si vous voulez retourner HTTP 404 Not found erreur pour les non-racines:

func serveRest(w http.ResponseWriter, r *http.Request) { 
    if r.URL.Path != "/" { 
     http.NotFound(w, r) 
     return 
    } 

    w.Write([]byte("Hi!")) 
} 

And Go tutoriel: https://tour.golang.org/

consultez également le Go étiquette info ici sur SO, il a une section Go Tutoriels.

+0

Merci @icza, je l'apprécie. – Shailesh

1

Vous pouvez consulter https://github.com/julienschmidt/httprouter

Par son readme:

Seuls les résultats explicites: Avec d'autres routeurs, comme http.ServeMux, un chemin d'URL demandé pourrait correspondre à plusieurs modèles. Par conséquent, ils ont des règles de priorité de motif maladroit, comme la correspondance la plus longue ou la première enregistrée, le premier apparié. Par la conception de ce routeur, une demande peut correspondre uniquement à un ou aucune route. Par conséquent, il n'y a pas de matchs non désirés , ce qui est idéal pour l'optimisation du référencement et améliore l'expérience de l'utilisateur .

Here est un bon contenu vidéo pour démarrer dans Go.