Как указано в комментарии выше, каталог, в который вы помещаете ваши файлы, будет относиться к скомпилированному двоичному файлу.
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