Обслуживать домашнюю страницу и статический контент из корня

В Golang, как мне доставлять статический контент из корневого каталога, при этом все еще имея обработчик корневого каталога для обслуживания домашней страницы.

Используйте следующий простой веб-сервер в качестве примера:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", HomeHandler) // homepage
    http.ListenAndServe(":8080", nil)
}

func HomeHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "HomeHandler")
}

Если я сделаю

http.Handle("/", http.FileServer(http.Dir("./")))

Я получаю панику, говоря, что у меня есть две регистрации для "/", Каждый пример Голанга яМы обнаружили, что в Интернете предлагается подавать их статический контент из разных каталогов, но это неt очень помогает для таких вещей, как sitemap.xml, favicon.ico, robots.txt и других файлов, которые на практике или обязательны для обслуживания из корня.

Поведение, которое я ищу, - это поведение, которое встречается на большинстве веб-серверов, таких как Apache, Nginx или IIS, где оно сначала пересекает ваши правила, и если правило не найдено, оно ищет фактический файл, и если файл не найден, его Ошибки 404. Я думаю, что вместо того, чтобы писатьhttp.HandlerFuncМне нужно написатьhttp.Handler который проверяет, ссылаюсь ли я на файл с расширением, и если это так, проверяет наличие файла и обслуживает файл, в противном случае он 404 или обслуживает домашнюю страницу, если запрос был "/", К сожалению, Я'Я не уверен, как даже начать такую задачу.

Часть меня говорит, что яЯ сильно усложняю ситуацию, которая заставляет меня думать, что я что-то упустил? Любое руководство будет оценено.

Ответы на вопрос(3)

Ваш ответ на вопрос