Вы используете HTML-шаблон и CSS на одной странице с нетрадиционной структурой каталогов? - PullRequest
0 голосов
/ 09 февраля 2019

Я пытался выяснить, как обслуживать css и html на одной и той же странице несколько раз, но я всегда просто разочаровываюсь и использую начальный загрузчик.Я действительно хочу, чтобы в моем следующем проекте была написана моя собственная рука css.Мое дерево исходных текстов выглядит следующим образом.

 - cmd
     - main.go 
 - static
     - css
     - templates

Причина, по которой мое дерево исходных кодов выглядит следующим образом, потому что я хочу иметь два пакета в cmd: один для предоставления фиктивных данных, другой для запуска реального приложения.Я видел другие посты, где используется http.FileServer, однако структура проекта сильно отличается от файла main.go в корне каталога.Я пытаюсь сделать путь что-то вроде:

fs := http.FileServer(http.Dir("../static/css"))
http.Handle("/signup/", http.StripPrefix("/static/css", fs))

1 Ответ

0 голосов
/ 09 февраля 2019

Как указано в комментарии выше, каталог, в который вы помещаете ваши файлы, будет относиться к скомпилированному двоичному файлу.

go run main.go скомпилируется в вашем текущем каталоге и затем запустит исполняемый файл, поэтому любые пути в вашем приложении будут из того места, где ваше приложение было скомпилировано , а не из общей структуры проекта.Я попытаюсь показать пример ниже:

// Current working directory
/your-github-username/project-folder

// Folder with entry point (main.go)
/your-github-username/project-folder/cmd

// Folder with static files (css file)
/your-github-username/project-folder/static

Если вы запустите go run ./cmd/main.go в своем /your-github-username/project folder, то, как вы написали в своем вопросе, ваше приложение будет пытаться загрузить статические файлы из/your-github-username/static.Т.е. на одну папку, откуда вы запускали команду go run.

Но если вы создаете и развертываете свое приложение, папку /static необходимо будет заново создать относительно того места, куда вы положили скомпилированный двоичный файл .

Что-то приятное в вашем main.go должно иметь какую-то функцию инициализации , которая проверяет необходимые папки, создает их и затем выводит инструкции, если онипустые и т. д. все еще нужно что-то добавить в них как часть процесса развертывания.

Если вам нужен действительно хороший пример статического хостинга файлов, я бы порекомендовал взглянуть на примеры go-chi router library так как есть несколько замечательных, в том числе статический файл для размещения файлов:

пример статического файла go-chi

...