@Espio

Как вывести всю HTML страницу в go?

Мне нужно развернуть статичную html страницу в go.

Что выводится
5ee71c3425231705193835.jpeg

Что должно выводится
5ee71c0267934088539963.jpeg

Структура программы
5ee71c4a23a9d490108141.jpeg

Код
package main

import (
	
	"html/template"
	"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("/"):]
	p, _ := loadPage(title)
	t, err := template.ParseFiles("pages/page.html")
	t.Execute(w, p)
	if err != nil {
		log.Println(err)
	}
}

func main() {

	http.HandleFunc("/", viewHandler)

	log.Fatal(http.ListenAndServe(":8080", nil))

}
  • Вопрос задан
  • 1344 просмотра
Решения вопроса 1
EvgenyMamonov
@EvgenyMamonov Куратор тега Go
Senior software developer, system architect
У вас проблема в том, что не отображается статика (изображения, CSS).
Эту проблему можно решить, как минимум, двумя способами.
Обслуживать статику вебсервером, например Nginx.
Или сделать handler на Go, который будет отдавать статику.
Вот тут есть хороший пример как это можно сделать

https://www.alexedwards.net/blog/serving-static-si...

Если кратко, как вариант:
1. создайте папку static и переложите туда файлы `style.css`, `dog2.jpg`
2. добавьте в URL у картинок и CSS "/static/", чтобы было вот так
<link rel="stylesheet" href="/static/style.css"/>
<img src="/static/sob2.jpg" />

3. сделайте обработчик /static
// добавьте эти строки
fs := http.FileServer(http.Dir("./static"))
http.Handle("/static/", http.StripPrefix("/static/", fs))
// перед этой строкой
http.HandleFunc("/", viewHandler)


Если настраивать через Nginx, тогда минимальные рабочие настройки будут примерно такими
server {
    listen *:80;

    server_name localhost;

    # root /тут_путь_к_вашей_папке/static;
    # для Windows будет что-то типа такого
    root D:/GoExam/static;

    location / {
        try_files $uri @process;
    }

    location @process {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_send_timeout 30;
        proxy_read_timeout 30;
    }
}

добавлять их нужно в файл nginx.conf, в секцию http
пример

http {
  # тут идут настройки Nginx
  ....
  # тут дописываете код, что я выше написал, грубо перед закрывающей "}"
}

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы