You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go嵌入式静态资源无法加载返回404问题排查求助

问题原因与解决方法

你的问题出在两个关键地方:

  • 路由匹配方式错误:r.Handle("/assets/", ...)只会精确匹配/assets/这个路径,无法匹配/assets/app.js这类子路径,必须换成PathPrefix来匹配所有以/assets/开头的请求。
  • 文件路径前缀未剥离:你嵌入的assets目录下的文件,在embed.FS里的实际路径是assets/app.js,但请求过来的路径是/assets/app.js,直接传给FileServer的话,它会尝试在FS里找/assets/app.js(实际不存在),必须先把请求路径里的/assets/前缀去掉,让FileServer用剩下的app.js去FS里找对应的assets/app.js。

修改后的代码如下:

package main

import (
  "embed"
  "fmt"
  "github.com/gorilla/mux"
  "log"
  "net/http"
)

//go:embed assets
var assets embed.FS

func main() {
  r := mux.NewRouter()
  // 改用PathPrefix匹配所有/assets/开头的请求,并用StripPrefix去掉前缀
  r.PathPrefix("/assets/").Handler(http.StripPrefix("/assets/", http.FileServer(http.FS(assets))))

  srv := &http.Server{
    Handler: r,
    Addr:    fmt.Sprintf(":%d", 9876),
  }

  log.Fatal(srv.ListenAndServe())
}

修改后,访问http://localhost:9876/assets/app.js时,StripPrefix会把请求路径处理成app.js,FileServer就能正确找到嵌入FS里的assets/app.js并返回内容。

内容的提问来源于stack exchange,提问作者Fossmo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 05:15:41