登录
首页 >  Golang >  Go问答

如何防止 http.ListenAndServe 改变静态输出中的样式属性?

来源:stackoverflow

时间:2024-04-01 13:33:33 229浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《如何防止 http.ListenAndServe 改变静态输出中的样式属性?》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

在一个非常基本的手写网页(没有 js、样式表等)中,我有一些静态 html,其部分如下所示。

  • reload hmi
  • 我正在使用 go 的 http.listenandserve 来提供页面服务。结果如下:

  • reload hmi
  • 注意更改后的样式属性。

    服务器实现也很初级。它作为 goroutine 启动:

    // systemControlService provides pages on localhost:8003 that
    // allow reboots, shutdowns and restoring configurations.
    func systemControlService() {
        info("Launching system control service")
        http.HandleFunc("/", controlPage)
        log.Fatal(http.ListenAndServe(":8003", nil))
    }
    
    // loadPage serves the page named by title
    func loadPage(title string) ([]byte, error) {
        filename := "__html__/" + title + ".html"
        info(filename + " requested")
        content, err := ioutil.ReadFile(filename)
        if err != nil {
            info(fmt.Sprintf("error reading file: %v", err))
            return nil, err
        }
        info(string(content))
        return content, nil
    }
    
    // controlPage serves controlpage.html
    func controlPage(w http.ResponseWriter, r *http.Request) {
        p, _ := loadPage("controlpage")
        fmt.Fprintf(w, string(p))
    }

    在上面的 func loadpage() 中,info 是一个日志记录调用。为了进行调试,我在返回 controlpage.html 的内容之前调用它。日志条目显示此时它尚未损坏,因此问题几乎必须出在 listenandserve 中。

    我在 go 文档中没有找到任何似乎适用的 http 内容。我不知道这里发生了什么事。任何帮助表示赞赏。


    解决方案


    你能试试这个吗,注意fprint而不是fprintf

    func controlpage(w http.responsewriter, r *http.request) {
        p, _ := loadpage("controlpage")
        fmt.fprint(w, string(p))
    }

    您的代码存在几个问题(包括当您可以使用 http.fileserver 提供静态内容时它根本存在的事实,以及您在发送之前将整个响应读入 []byte 的事实返回而不是流式传输)但主要是这样的:

    fmt.Fprintf(w, string(p))

    fprintf 的第一个参数是一个格式字符串。它的作用是替换格式字符串中以 % 开头的内容。要将 []byte 写入写入器,您不需要 fmt 包,因为您不想格式化任何内容。 w.Write()就够了。 fmt.fprint 也可用,但完全没有必要;它会做一些无意义的额外工作,然后调用 w.write

    理论要掌握,实操不能落!以上关于《如何防止 http.ListenAndServe 改变静态输出中的样式属性?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

    声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
    相关阅读
    更多>
    最新阅读
    更多>
    课程推荐
    更多>