Catch-All URL в Голанге - PullRequest
       1

Catch-All URL в Голанге

0 голосов
/ 11 мая 2018

Я планирую переписать мое приложение для колб на Голанге. Я пытаюсь найти хороший пример для того, чтобы поймать весь маршрут в Голанге, как в моем приложении для фляги ниже.

from flask import Flask, request, Response
app = Flask(__name__)

@app.route('/')
def hello_world():
  return 'Hello World! I am running on port ' + str(port)


@app.route('/health')
def health():
  return 'OK'

@app.route('/es', defaults={'path': ''})
@app.route('/es/<path:path>')
def es_status(path):
  resp = Response(
       response='{"version":{"number":"6.0.0"}}',
       status=200,
       content_type='application/json; charset=utf-8')
  return resp

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Используйте путь, заканчивающийся на "/", чтобы соответствовать целому поддереву с http.ServeMux .

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
   // The "/" matches anything not handled elsewhere. If it's not the root
   // then report not found.  
   if r.URL.Path != "/" {
      http.NotFound(w, r)
      return
   }
   io.WriteString(w, "Hello World!")
})

http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
  io.WriteString(w, "OK")
})

http.HandleFunc("/es/", func(w http.ResponseWRiter, r *http.Request) {
  // The path "/es/" matches the tree with prefix "/es/".
  log.Printf("es called with path %s", strings.TrimPrefix(r.URL.Path, "/es/"))
  w.Header().Set("Content-Type", "application/json; charset=utf-8")
  io.WriteString(w, `{"version":{"number":"6.0.0"}}`)
}

Если шаблон "/ es" не зарегистрирован, то мультиплексированиеперенаправляет "/ es" в "/ es /".

0 голосов
/ 11 мая 2018

Вы можете взглянуть на Gorilla Mux , который является популярным маршрутизатором URL и диспетчером для golang.Пример перехвата всех маршрутов может быть настроен с использованием Mux:

r := mux.NewRouter()
r.HandleFunc("/specific", specificHandler)
r.PathPrefix("/").Handler(catchAllHandler)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...