首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >嵌入目录是否支持交叉编译?

嵌入目录是否支持交叉编译?
EN

Stack Overflow用户
提问于 2021-08-10 16:20:01
回答 1查看 74关注 0票数 1

问题的摘要:对目录中的嵌入式文件的访问适用于本机编译,而不是跨编译代码。

下面的代码将文件(static/index.html)嵌入到目录中并通过HTTP公开:

代码语言:javascript
运行
复制
package main

import (
    "embed"
    "net/http"
    "os"

    "github.com/gorilla/handlers"
    "github.com/gorilla/mux"
    "github.com/rs/cors"
    "github.com/rs/zerolog/log"
)

//go:embed static
var content embed.FS


func main() {
    // API and static site
    r := mux.NewRouter()
    r.Use(mux.CORSMethodMiddleware(r))
    r.Use(func(next http.Handler) http.Handler {
        return handlers.LoggingHandler(os.Stdout, next)
    })
    c := cors.New(cors.Options{
        AllowCredentials: true,
        //Debug: true,
    })
    handler := c.Handler(r)
    r.PathPrefix("/").Handler(http.FileServer(http.Dir("./static/")))
    log.Info().Msg("starting dash webserver at port 1495")
    _ = http.ListenAndServe("0.0.0.0:1495", handler)
}

我通过go1.16.7在Windows 10 WSL2 (编辑:和本机Windows 10)中编译了这段代码( go build -o goembed.wsl2 )。启动时,运行curl localhost:1495会给出正确的结果(index.html中的文本)。

然后我通过env GOOS=linux GOARCH=amd64 go build -o goembed.linux编译了它(仍然在WSL2 2/ via 10中)(或者在Windows 10中使用相关的咒语来设置环境变量),并在Ubuntu18.04服务器上启动了goembed.linux

程序启动,但curl localhost:1495的输出为404 File Not Found

为什么会这样呢?

有趣的是,嵌入单个文件(包含它的变量为[]byte类型)在两个二进制文件(本机WSL和amd64)中通过HTTP服务器正确地公开了它。

编辑:在本机Windows 10中编译时,我有相同的行为,我更新了上面的引用

EN

回答 1

Stack Overflow用户

发布于 2021-08-11 09:18:56

这是我的一个错误:我嵌入了static,但是服务于./static/,它是本地(OS)目录,而不是嵌入式目录。它应该是:

代码语言:javascript
运行
复制
r.PathPrefix("/").Handler(http.FileServer(http.FS(content)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68730329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档