REST end возвращает 404 в версии go после 1.6 - PullRequest
0 голосов
/ 18 мая 2018

Я обновился с 1.6 golang до 1.9 (и 1.10), и все вызовы REST теперь возвращают 404. Они отлично работали с 1.6.

main.go

import ( "net/http" )

func main() {
   mux := http.NewServeMux()
   handlers.TableHandler(*mux)
}

table_handler.go

func TableHandler(mux http.ServeMux) {
    mux.HandleFunc("/gpdp/v1/prices/", func(w http.ResponseWriter, r *http.Request) 

        log.Println("request for prices: ", r.Method, r.Body)
...}

1 Ответ

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

Функция main копирует значение mux при вызове функции TableHandler.Функция TableHandler изменяет копию.Это значение сбрасывается при возврате из функции TableHandler.В результате обработчик не зарегистрирован в мультиплексоре main().

Исправлено изменение типа аргумента TableHandler с http.ServeMux на *http.ServeMux.

import ( "net/http" )

func main() {
   mux := http.NewServeMux()
   handlers.TableHandler(mux)  // <--- pass pointer here
}

func TableHandler(mux *http.ServeMux) {  // <--- declare arg as pointer
    mux.HandleFunc("/gpdp/v1/prices/", func(w http.ResponseWriter, r *http.Request) 

        log.Println("request for prices: ", r.Method, r.Body)
...}

Приложение перестало работать из-за изменения на http.ServeMuxв 2016 году .Это изменение выявило проблему в приложении.Копирование значений http.ServeMux никогда не поддерживалось.Команда go vet выводит предупреждение при копировании значений http.ServeMux.

...