Go web endpoint cannot find static index.html file
php Editor Banana found that when using Go language to develop web applications, we sometimes encounter a common problem: when we try to access the web endpoint, we receive a 404 Error, prompting that the static index.html file cannot be found. This question can be confusing for developers, especially for beginners. So, how should we solve this problem? Next, we will introduce the solution in detail to help you solve this problem smoothly.
Question content
This is my code:
package main import ( "fmt" "log" "net/http" ) const customport = "3001" func main() { fileserver := http.fileserver(http.dir("./static")) port:= fmt.sprintf(":%s", customport) http.handle("/", fileserver) fmt.printf("starting front end service on port %s", port) err := http.listenandserve(port, nil) if err != nil { log.panic(err) } }
The top level folder is microservices
and is set up as the go workspace. This web service will be one of many. It is located in the following folder:
microservices |--frontend |--cmd |--web |--static |--index.html |--main.go
I'm in the top level microservice folder and I start it with: go run ./frontend/cmd/web
. It starts fine with no errors. But when I go to chrome and type http://localhost:3001
I get 404 Page Not Found. Even http://localhost:3001/index.html
will give 404 Page Not Found. I just learned go and I don’t know why I can’t find the ./static
folder?
Workaround
According to your command, the path must be ./frontend/cmd/web/static, not just ./static. That's not portable; the path changes with the working directory.
Consider embedding static directories. Otherwise, you must make the path configurable (flags, environment variables, etc.)
The disadvantage of embedding is that you have to rebuild the program after making any changes to the static files.
You can also use a hybrid approach. If the flag (or other) is set, use that to serve from disk, otherwise use the embedded file system. This flag is convenient during development, and the embedded file system makes deployment easy since you only need to copy the program binaries.
package main import ( "embed" "flag" "io/fs" "net/http" "os" ) //go:embed web/static var embeddedAssets embed.FS func main() { var staticDir string flag.StringVar(&staticDir, "static-dir", staticDir, "Path to directory containing static assets. If empty embedded assets are used.") flag.Parse() var staticFS fs.FS = embeddedAssets if staticDir != "" { staticFS = os.DirFS(staticDir) } http.Handle("/", http.FileServer(http.FS(staticFS))) // ... }
The above is the detailed content of Go web endpoint cannot find static index.html file. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Queue threading problem in Go crawler Colly explores the problem of using the Colly crawler library in Go language, developers often encounter problems with threads and request queues. �...

The library used for floating-point number operation in Go language introduces how to ensure the accuracy is...

The difference between string printing in Go language: The difference in the effect of using Println and string() functions is in Go...

The problem of using RedisStream to implement message queues in Go language is using Go language and Redis...

What should I do if the custom structure labels in GoLand are not displayed? When using GoLand for Go language development, many developers will encounter custom structure tags...

Which libraries in Go are developed by large companies or well-known open source projects? When programming in Go, developers often encounter some common needs, ...

Two ways to define structures in Go language: the difference between var and type keywords. When defining structures, Go language often sees two different ways of writing: First...

When using sql.Open, why doesn’t the DSN report an error? In Go language, sql.Open...
