go中用golang.org/x/net/html解析html需注意:跳过注释节点、仅在非预格式化上下文规整文本空格、用html.render输出避免自闭合标签错误、脚本样式内容禁用压缩。

Go 里用 golang.org/x/net/html 解析 HTML 容易卡在注释节点
HTML 注释(<!-- ... -->)在 golang.org/x/net/html 中是独立的 html.CommentNode 类型,但默认遍历器不会跳过它——结果就是压缩后注释原样保留,甚至可能因节点顺序错乱导致闭合标签错位。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 遍历 DOM 树时,对每个
node.Type == html.CommentNode的节点直接continue或设为nil - 别依赖
node.Data做字符串替换,注释内容在node.Data里不带<!--和-->,手动拼接容易出错 - 注意
html.Parse默认不合并相邻文本节点,连续空格或换行可能被拆成多个html.TextNode,得在遍历中主动合并
strings.TrimSpace 不能直接用于 HTML 文本节点压缩
直接对每个 html.TextNode 的 node.Data 调用 strings.TrimSpace 会误杀内联样式里的空格、<pre class="brush:php;toolbar:false;"></pre> 或 <code> 里的有意义空白,而且无法处理标签间的“间隙空格”(比如 <div> <span> 中的空格)。<p>实操建议:</p>
<p><span>立即学习</span>“<a href="https://pan.quark.cn/s/00968c3c2c15" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">go语言免费学习笔记(深入)</a>”;</p>
<ul>
<li>只对非预格式化上下文(即不在 <code><pre class="brush:php;toolbar:false;"></pre>、<textarea></textarea>、<script></script>、<style></style> 内)的文本节点做空格规整
regexp.MustCompile(`\s+`) 替换为单个空格,再 trim 首尾,比 TrimSpace 更可控











