标签本身不支持go语法高亮,必须配合保留格式,并通过highlight.js等库或服务端渲染实现高亮;直接使用会丢失换行、缩进及颜色,且等需转义。

code标签本身不支持Go语法高亮
<code> 是纯语义标签,浏览器只把它当普通内联文本渲染,不会识别 Go 关键字、字符串或注释。直接写 <code>func main() { fmt.Println("hello") }
结果就是一行无颜色、无缩进的裸文本,连换行都会丢失(因为 <code> 默认是 inline 元素)。
常见错误现象:func 和 fmt.Println 看起来和普通英文一样;中文引号被当成乱码;{ 和 } 没有配对高亮;复制时带上了多余的空格或折行符。
- 必须配合
<pre class="brush:php;toolbar:false;"></pre>保留换行与空格 - 高亮得靠外部手段:CSS 类名 + JavaScript 库(如 highlight.js),或服务端预渲染
- 若只是示意代码结构,可用
<pre class="brush:php;toolbar:false;"><code class="go">...</code></pre>配合 highlight.js 的自动检测(但 Go 支持较弱,建议显式声明语言)
用 pre + code 包裹并手动转义特殊字符
这是最轻量、零依赖的做法,适合文档页、博客片段或内部工具页面。
Go 代码里常见的 、<code>>、& 必须转义,否则会被浏览器解析为 HTML 标签。比如 map[string]int 里的 和 <code>> 不转义就会消失。
- 用
<替代,<code>>替代>,&替代& - 缩进用空格(别用 Tab),4 空格是 Go 社区惯例
- 完整结构示例:
<pre class="brush:php;toolbar:false;"><code class="go">package main<br><br>import "fmt"<br><br>func main() {<br> fmt.Println("Hello, 世界")<br>}<br></code>
用 highlight.js 实现 Go 语法高亮(推荐方案)
highlight.js 对 Go 的支持从 v11.7 开始较稳定,但默认不加载 Go 语言包,必须显式引入。
容易踩的坑:highlight.min.js 本体不包含任何语言定义;只引入 CSS 不会触发高亮;language-go 类名必须拼写准确(不是 go 或 golang)。
- 在 HTML 底部引入:
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css"><br><script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script><br><script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/go.min.js"></script><br><script>hljs.highlightAll();</script>
- 代码块写法必须是:
<pre class="brush:php;toolbar:false;"><code class="go">...</code></pre>(注意 class 名带language-前缀) - 如果页面动态插入代码,需手动调用
hljs.highlightElement(codeEl)
服务端渲染更可靠,但需要构建环节
静态站点生成器(如 Hugo、Zola)或 Markdown 渲染器(如 Goldmark)通常内置 Go 语法支持,比前端 JS 更稳定——没有 FOUC(高亮闪动)、不依赖 CDN、SEO 友好。
例如 Hugo 中写 Markdown:
```go<br>func fib(n int) int {<br> if n < 2 {<br> return n<br> }<br> return fib(n-1) + fib(n-2)<br>}<br>```,它会自动输出带 class 的 <pre class="brush:php;toolbar:false;"><code class="go"></code> 结构。<p>关键点在于:服务端转义和高亮是一次性完成的,不用操心浏览器兼容、执行时机或网络失败。但代价是你得接受构建流程,无法纯 HTML 打开即用。</p><p>真正麻烦的是混合场景:比如一个页面部分代码由 JS 动态加载,又想保持高亮一致——这时必须确保前后端用同一套词法解析规则,否则 <code>type T struct{ X, Y int }</code> 里字段声明可能被错切。</p></pre>前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











