Чтобы использовать пакет net/http, его необходимо импортировать:
import (
"fmt"
"io/ioutil"
"net/http"
)
Давайте создадим обработчик viewHandler, который позволит пользователям просмотреть страницу вики. Он будет обрабатывать URL с префиксом "/view/".
func viewHandler(w http.ResponseWriter, r *http.Request) {
title := r.URL.Path[len("/view/"):]
p, _ := loadPage(title)
fmt.Fprintf(w, "<h1>%s</h1><div>%s</div>",
p.Title, p.Body)
}
Опять же, обратите внимание на использование _ для игнорирования error, при возвращении значения из loadPage. Это сделано здесь для простоты и вообще считается плохой практикой. Мы займемся этим позже.
Во-первых, эта функция извлекает заголовок страницы из r.URL.Path, компонента пути URL запроса. Path повторно разрезается с помощью [len("/view/"):] для удаления ведущего компонента "/view/" пути запроса. Это связано с тем, что путь всегда начинается с "/view/", который не является частью заголовка страницы.
Затем функция загружает данные страницы, форматирует страницу со строкой простого HTML и записывает его в w, http.ResponseWriter.
Чтобы использовать этот обработчик, мы переписываем нашу функцию main, чтобы инициализировать http, используя viewHandler для обработки любых запросов по пути /view/.
func main() {
http.HandleFunc("/view/", viewHandler)
log.Fatal(http.ListenAndServe(":8080", nil))
}
Взглянем на весь код веб-приложения, который мы уже написали.
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
type Page struct {
Title string
Body []byte
}
func (p *Page) save() error {
filename := p.Title + ".txt"
return ioutil.WriteFile(filename, p.Body, 0600)
}
func loadPage(title string) (*Page, error) {
filename := title + ".txt"
body, err := ioutil.ReadFile(filename)
if err != nil {
return nil, err
}
return &Page{Title: title, Body: body}, nil
}
func viewHandler(w http.ResponseWriter, r *http.Request) {
title := r.URL.Path[len("/view/"):]
p, _ := loadPage(title)
fmt.Fprintf(w, "<h1>%s</h1><div>%s</div>",
p.Title, p.Body)
}
func main() {
http.HandleFunc("/view/", viewHandler)
log.Fatal(http.ListenAndServe(":8080", nil))
}
Давайте создадим некоторые данные страницы (как test.txt), скомпилируем наш код и попробуем открыть страницу вики.
Откройте файл test.txt в своем редакторе и сохраните строку "Hello world" (без кавычек) в нем.
$ go build wiki.go
$ ./wiki
(Если вы используете Windows, вы должны ввести wiki без ./ для запуска программы.)
При работающем веб-сервере при обращении к http://localhost:8080/view/test должна отобразиться страница с названием «test», содержащая слова «Hello world».
Читайте также:
- Веб-приложение на Go: введение
- Веб-приложение на Go: структуры данных, сохранение и загрузка страницы
- Веб-приложение на Go: введение в пакет net/http, пример веб-сервера на Go
- Веб-приложение на Go: редактирование страниц, пакет html/template

Комментариев нет:
Отправить комментарий