...Если вникнуть, то ваш код нужно скорректировать вот так:
_, err := os.Stat(filename)
if err != nil {
if os.IsNotExist(err) {
fmt.Println("file does not exist") // это_true
} else {
// другая ошибка (файл существует) - это_false
}
} else {
// тут данные функции os.Stat()
}
Собственно, у меня задача проверить наличие файла в папке...
Может быть есть функция специально для этого?
А то гугленье и советы_старших_товарищей всё про Stat(). Хотя она не для проверки наличия.
Ладно, я понял. Нюансы логики.
Тогда скорректируем вопрос: в роутинге, если видим на конце Пути_URL'а расширение_Х (например .css), то ищем этот_файл в данной_директории.
Вот как указать данную_директорию?
Вот это, что я описываю (сервер с выделенной функцией прямого открывания файлов по имени в URL'е): http.Handle("/", http.FileServer(http.Dir("directory")))
http.ListenAndServe(":80", nil)
равно вот этому (голый сервер, отдающий файлы также по URL'у): http.ListenAndServe(":80", http.FileServer(http.Dir("directory")))
Лично я бы никак это роутингом не назвал. :)
Не-не.., как отдать файл по решению роутера - это я знаю, это всё работает.
Вопрос в другом: отдать файл по URL'у ПРОСТО, мимо роутинга.
Сейчас есть логика: на все запросы запускается роутинг. (Но в роутинге нет "технической сопутки" - она не отдаёт подключенные файлы. Там чисто бизнес-логика.)
А надо: на все запросы напрямую отдаём файлы; а иначе - запускаем роутинг.
...Или так не бывает?..
Остался последний штрих. ))
[Для авто-запроса-открытия подключенных файлов.] Надо, в имеющийся код-роутинг вставить функцию, просто возвращающую файл, имя которого указано в конце Пути_URL'а. Типа функции http.Handle("/", http.FileServer(http.Dir("directory"))).
В main() эту функцию мне не даёт вставить, ибо там уже есть слушатель_всех_запросов:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
parsingURL(w, r) // Это мой роутинг.
})
А при вставке в функцию parsingURL() - где маршрутизация моя - компилируется, но страницы вообще не открываются, и в консоли ругань.
Может быть что-то подскажете? :)
А почему структуру надо передавать как указатель?
Как не_указатель её не передать? Понятно, что ЯП не позволит как не_указатель, но вот и интересно - в чём смысл указателя тут?
Ну понятно. Уже подумал про это.
Тут вопрос больше не в том, что юзер видит некий_файл, а в том, что любой может взять с моего сервере какой-то файл (пусть и не совсем любой).
Александр, а как-то защищается запрос подключенных файлов? То есть браузер запрашивает CSS (для "ведущей" уже загруженной HTML-страницы): /domen.com/style.css ; тогда как основной_URL (по которому ведущая HTML-страница): /domen/index.html. В каком месте отличие?
Так любой наберёт URL_с_CSS, и получит мой CSS, что ли?
Не могу нагуглить.
Вот сейчас попытался отправить [в браузер] вслед за HTML-файлом его CSS-файл. Просто прописав его следующей строкой, типа:
http.ServeFile(w, r, "directory/MyPage.html") // Это HTML-файл.
http.ServeFile(w, r, "directory/Style.css") // Это CSS, подключенный в HTML-файле.
Но отображение - как и было (HTML без CSS). И пишет: "Лишний ответ" - про строку с указанным CSS-файлом.
Как-то особенно нужно указывать подключенные файлы?
> логично, что проблема в маршрутизаторе скорее всего. Или в неправильно прописанных путях в html.
Браузер локально (по клику мышкой на файле) корректно всё открывает. Т. е. пути в HTML нормальные.
А что с маршрутизатором? Я указал: открыть такой-то_файл, он открылся. Что ещё?
Почему HTML-файл автоматом не тянет за собой все файлы, что в нём подключены? Он разве не должен? Как в Go-сервере устроено? (Браузер в локальном режиме тянет же автоматом всё.)