文由Zoomla!逐浪CMS官方发行,提升每一个开发者技能,并提供丰富的帮助信息。
在动力场景中,可以自由引用全场背景音乐。
但是,在一些特殊场合,比如要做一个音乐相册,如何自由定义相应音乐?
其实方法很简单,我们只要采用图文按钮,在“html”模式下粘贴代码就能自由上传、定义音乐:
首先我们选择左上角的添加新组件,
然后选择图文按钮,如下图:
在编辑器录入框中,输入相应代码:
插入视频的方法是:
<video width="300px" height="200px" style="border: 1px solid rgb(154, 199, 254); border-image: none;" src=" https://www.z01.com/The_Sea.mp4 " controls="" poster=" https://www.z01.com/skin/2010/images/mp3.jpg"></video >
其效果如下:
插入音频的方法是:
<audio src=" https://www.z01.com/The_Sea.mp3 " controls="controls" autoplay />
其中autoplay是用于自动播放,如果放入此字符,则会自动播放,否则不会自动播放,如下图所示:
而controls是显示播放器按钮,如果不想显示播放器,则放入背景,不显示即可。
如果要插入优酷等第三方视频,则应使用通用代码,进行插入:
<iframe height=498 width=510 src='http://player.youku.com/embed/XNzEzNTkyMTAw' frameborder=0 'allowfullscreen'></iframe>
体验预览:http://v.z01.com/h5/1318
*需要注意的是,在HTML代码模式编辑好代码后,要再点此代码,回到可视化编辑,再保存,否则代码不会生效。
提案:https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p1967r10.html
通过预处理器嵌入资源,例如嵌入图片 #embed "art.png",嵌入当前代码 #embed __FILE__
#include <string_view>
#include <iostream>
static constexpr char self[]={
#embed __FILE__
};
int main()
{
std::cout << std::string_view{std::cbegin(self), std::cend(self)} <<std::endl;
}
ASM generation compiler returned: 0
Execution build compiler returned: 0
Program returned: 0
#include <string_view>
#include <iostream>
static constexpr char self[]={
#embed __FILE__
};
int main()
{
std::cout << std::string_view{std::cbegin(self), std::cend(self)} <<std::endl;
}
在线测试
https://godbolt.org/z/zEz3GP6qW
在Golang 1.16版本中,引入了一个新特性://go:embed。这个特性允许你在编译时将文件或目录直接嵌入到你的Go程序中。想象一下,你的静态文件、配置文件甚至图片都可以无缝地集成到你的二进制文件中,再也不需要担心文件丢失或者路径问题了!
假设你有一个静态HTML文件,名为index.html。你可以使用//go:embed将它嵌入到你的Go代码中。
package main
import (
_ "embed"
"fmt"
)
//go:embed index.html
var indexHTML string
func main() {
fmt.Println(indexHTML)
}
html的内容为:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>embed_sample.go</title>
</head>
<body>
测试嵌入外部文件!
</body>
</html>
在上面的代码中,我们使用//go:embed将index.html文件的内容嵌入到indexHTML变量中。然后,你就可以在代码中随意使用这个变量了。运行代码,得到以下输出:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>embed_sample.go</title>
</head>
<body>
测试嵌入外部文件!
</body>
</html>
当然,有时候你可能需要嵌入多个文件。这也难不倒//go:embed!
//go:embed static/*.html
var staticFiles embed.FS
data, _ :=staticFiles.ReadFile("static/page1.html")
fmt.Println(string(data))
在这个例子中,我们使用通配符将static目录下的所有HTML文件嵌入到staticFiles变量中。然后,我们可以通过ReadFile方法读取这些文件。
有时候,你可能想要嵌入整个目录,而不仅仅是文件。
// 嵌入目录
//go:embed static/*
var assets embed.FS
// 嵌入目录
fs.WalkDir(assets, ".", func(path string, d fs.DirEntry, err error) error {
if err !=nil {
return err
}
fmt.Println(path)
return nil
})
在这个例子中,我们将static目录及其子目录中的所有文件嵌入到了assets变量中。然后,我们使用fs.WalkDir遍历并打印出所有嵌入的文件路径。
//go:embed不仅可以嵌入文本文件,还可以嵌入二进制文件。
//go:embed logo.png
var logo []byte
// 嵌入二进制数据
fmt.Printf("Logo size: %d bytes\n", len(logo))
在这个例子中,我们将一个logo.png文件嵌入到了logo变量中。这个变量是一个字节切片,可以用来处理二进制数据。
为了帮助大家更好地理解//go:embed的用法,下面我们用表格的形式来总结一下:
用法类型 | 示例代码 | 说明 |
单个文件 | //go:embed index.html <br> var indexHTML string | 将单个文件的内容嵌入到字符串变量中 |
多个文件 | //go:embed static/*.html <br> var staticFiles embed.FS | 使用通配符将多个文件嵌入到文件系统变量中 |
嵌入目录 | //go:embed assets/* <br> var assets embed.FS | 将整个目录及其子目录中的所有文件嵌入到文件系统变量中 |
二进制文件 | //go:embed logo.png <br> var logo []byte | 将二进制文件嵌入到字节切片中 |
那么,//go:embed到底有哪些实际的使用场景呢?下面列出了一些常见的应用场景,供大家参考:
package main
import (
"embed"
_ "embed"
"fmt"
"io/fs"
)
// 嵌入单个文件
//
//go:embed index.html
var indexHTML string
// 嵌入多个文件按
//
//go:embed static/*.html
var staticFiles embed.FS
// 嵌入目录
//
//go:embed static/*
var assets embed.FS
//go:embed logo.png
var logo []byte
func main() {
fmt.Println(indexHTML)
data, _ :=staticFiles.ReadFile("static/page1.html")
fmt.Println(string(data))
// 嵌入目录
fs.WalkDir(assets, ".", func(path string, d fs.DirEntry, err error) error {
if err !=nil {
return err
}
fmt.Println(path)
return nil
})
// 嵌入二进制数据
fmt.Printf("Logo size: %d bytes\n", len(logo))
}
好了,小伙伴们,我们今天的Golang Embed Directive之旅就到这里了。希望通过这篇文章,你能够对//go:embed有一个全面的了解,并能够在实际项目中灵活运用这个特性。
如果你觉得这篇文章对你有所帮助,别忘了点赞、评论和关注哦!你的支持是我们不断创作优质内容的动力!
*请认真填写需求信息,我们会在24小时内与您取得联系。