Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止http.ListendServe更改静态输出中的样式属性?_Http_Go - Fatal编程技术网

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

如何防止http.ListendServe更改静态输出中的样式属性?,http,go,Http,Go,在一个非常基本的手写网页中,没有js、样式表等,我有一些静态html,其中一个部分如下所示 <li style="font-size:200%; margin-bottom:3vh;"> <a href="http://192.168.1.122:8000"> Reload HMI </a> </li> 在上面的func loadPage中,info是一个日志调用。对于调试,我在返回controlpage.html的内容之前调用它

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

<li style="font-size:200%; margin-bottom:3vh;">
  <a href="http://192.168.1.122:8000">
    Reload HMI
  </a>
</li>
在上面的func loadPage中,info是一个日志调用。对于调试,我在返回controlpage.html的内容之前调用它。日志条目显示它在这一点上没有损坏,因此问题几乎必须在ListendService中

我在Go文档中没有找到任何适用于http的内容。我不知道这里发生了什么。非常感谢您的帮助。

您能试试这个吗,请注意Fprint而不是Fprintf


您的代码有几个问题,包括当您可以使用http.FileServer来提供静态内容时,它根本就存在,以及在发送回响应之前将整个响应读入[]字节,而不是流式传输,但主要问题是:

fmt.Fprintf(w, string(p))
Fprintf的第一个参数是格式字符串。它将替换以%开头的格式字符串中的内容。要将[]字节写入写入器,您不需要fmt包,因为您不想格式化任何内容。这已经足够好了。fmt.Fprint也可用,但完全不需要;它将做一些额外的工作,但这些额外的工作不起作用,然后调用w.Write。

问题是fmt.Fprintf将响应正文解释为一个包含%替换的格式字符串。解决此问题的一种方法是提供格式字符串:

fmt.Fprintf(w, "%s", p)
使用这种方法不需要将p转换为字符串

这里的目标是将字节写入响应编写器。将字节写入响应编写器或任何其他io.writer的惯用且最有效的方法是:

w.Write(p)

fmt包不适合在此处使用,因为不需要格式化。

是的,这就是问题所在。我赞赏简洁的解决办法和缺乏评判性的评论。谢谢既然可以调用Write,为什么要将其转换为字符串并使用Fprint?@JimB,是的,这可能更好,尽管我不担心优化。这是一个小型控制系统上的最后一个页面,可用于单一触摸屏。为什么要投反对票?我是否指出了错误的路线?我试图尽可能地给出一个简单的答案,原始问题中没有要求优化代码。@MikeEllis:对不起,这个网站不是为了你个人的利益,它是一个任何人都可以找到经过社区审查的参考资料的资源。另一个答案更为正确,并且有助于更好地教育他人。被否决的是傲慢的语气。与nvcnvn恭敬简洁的回答进行比较。@MikeEllis根据nvcnvn的回答进行了更新,该回答忽略了问题,提出了糟糕的建议,没有解释建议背后的任何原因,只是提供代码而没有解释,这对OP造成了三重伤害。
fmt.Fprintf(w, string(p))
fmt.Fprintf(w, "%s", p)
w.Write(p)