Go-lang простой веб-сервер: служит для статического изображения

Я хочу написать простой веб-сервер в go, который делает следующее: когда я перехожу к http://example.go:8080/image, он возвращает статическое изображение. Я следую примеру, который я нашел здесь. В этом примере они реализуют этот метод:

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}

а затем обратитесь к нему:

...
...
http.HandleFunc("/", handler)

Теперь я хочу сделать изображение вместо записи в строку. Как я могу это сделать?

Ответ 1

Вы можете обслуживать статические файлы с помощью функции http.FileServer.

package main

import (
    "log"
    "net/http"
)

func main() {
    http.Handle("/", http.StripPrefix("/", http.FileServer(http.Dir("path/to/file"))))
    if err := http.ListenAndServe(":8080", nil); err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

EDIT: Подробнее идиоматический код.

EDIT 2: этот код выше вернет изображение image.png, когда браузер запрашивает http://example.go/image.png

Функция http.StripPrefix здесь в этом случае не является излишней, поскольку обрабатываемый путь - это веб-корень. Если изображения должны были быть отправлены с пути http://example.go/images/image.png, то строка, указанная выше, должна быть http.Handle("/images/", http.StripPrefix("/images/", http.FileServer(http.Dir("path/to/file")))).

Игровая площадка