有人在群里问「embed 函数怎么使用」,我追问了一句用的是什么语言,才搞清楚他其实是在写一个嵌在页面里的地图,和编程里的 embed 函数没什么关系。embed 这个词在几个不同场景下都出现过,用法完全不一样,所以先说清楚是哪个。
场景一:Go 的 //go:embed
这是最常见也最容易搜到的一个。作用是在编译时把静态文件打进二进制,启动后不用再依赖外部目录,部署起来一个文件就够。
import "embed"
//go:embed static/*
var files embed.FS
//go:embed version.txt
var version string
//go:embed web/index.html
var index []byte注意三点:注释和变量声明之间不能有空行;同一个变量不能既接 string 又接 FS;路径不能走出当前包目录,也不能用 .. 往上跳。文件多了用 embed.FS,然后 http.FileServer(http.FS(files)) 直接托管就行。
场景二:HTML 里的 embed 标签
这其实是标签,不是函数。用它嵌 PDF、嵌入多媒体内容。
<embed src="manual.pdf" type="application/pdf" width="800" height="600">现在嵌 PDF 更推荐 iframe,兼容性更好,移动端表现也稳定。embed 标签没有闭合标签,写不成 </embed>,用了也是被忽略。
场景三:其他语言里的同名函数
Python 有 matplotlib 的 embed,把图表嵌进 Tkinter 窗口;Qt 有 QAxWidget 嵌入 ActiveX;一些报表库也提供了 embed 方法把报表挂到页面上。这类用法都得看具体库的文档,没有通用写法。
初学者最常问的答案
如果你是在学 Linux 命令行,看到的可能是某个脚本里的 embed 命令;如果是在 Excel 或数据库里看到,很可能是自定义函数名,不是语言内置。判断方法很简单:看函数前面有没有包名或者对象,内置函数一般能直接查到官方文档。
- Go://go:embed 编译期嵌入。
- HTML:<embed> 标签。
- 其他:大概率是某个库提供的普通函数名。
顺带提醒一句,Go 的 embed 只能在包级变量上使用,函数内部的局部变量会编译报错,这是很多人第一次用就卡住的地方。