整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          在H5場景中插入自定義音頻和視頻(任意畫面)

          在H5場景中插入自定義音頻和視頻(任意畫面)

          文由Zoomla!逐浪CMS官方發(fā)行,提升每一個開發(fā)者技能,并提供豐富的幫助信息。

          在動力場景中,可以自由引用全場背景音樂。

          但是,在一些特殊場合,比如要做一個音樂相冊,如何自由定義相應(yīng)音樂?

          其實方法很簡單,我們只要采用圖文按鈕,在“html”模式下粘貼代碼就能自由上傳、定義音樂:

          首先我們選擇左上角的添加新組件,

          然后選擇圖文按鈕,如下圖:

          在編輯器錄入框中,輸入相應(yīng)代碼:

          插入視頻的方法是:

          <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是顯示播放器按鈕,如果不想顯示播放器,則放入背景,不顯示即可。

          如果要插入優(yōu)酷等第三方視頻,則應(yīng)使用通用代碼,進(jìn)行插入:

          <iframe height=498 width=510 src='http://player.youku.com/embed/XNzEzNTkyMTAw' frameborder=0 'allowfullscreen'></iframe>

          體驗預(yù)覽:http://v.z01.com/h5/1318

          *需要注意的是,在HTML代碼模式編輯好代碼后,要再點此代碼,回到可視化編輯,再保存,否則代碼不會生效。

          提案:https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p1967r10.html

          通過預(yù)處理器嵌入資源,例如嵌入圖片 #embed "art.png",嵌入當(dāng)前代碼 #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;
          }


          運行結(jié)果

          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

          么是Embed Directive?

          在Golang 1.16版本中,引入了一個新特性://go:embed。這個特性允許你在編譯時將文件或目錄直接嵌入到你的Go程序中。想象一下,你的靜態(tài)文件、配置文件甚至圖片都可以無縫地集成到你的二進(jìn)制文件中,再也不需要擔(dān)心文件丟失或者路徑問題了!

          嵌入單個文件

          假設(shè)你有一個靜態(tài)HTML文件,名為index.html。你可以使用//go:embed將它嵌入到你的Go代碼中。

          package main
          
          import (
          	_ "embed"
          	"fmt"
          )
          
          //go:embed index.html
          var indexHTML string
          
          func main() {
          	fmt.Println(indexHTML)
          }
          

          html的內(nèi)容為:

          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <title>embed_sample.go</title>
          </head>
          <body>
              測試嵌入外部文件!
          </body>
          </html>

          在上面的代碼中,我們使用//go:embed將index.html文件的內(nèi)容嵌入到indexHTML變量中。然后,你就可以在代碼中隨意使用這個變量了。運行代碼,得到以下輸出:

          <!DOCTYPE html>                   
          <html lang="en">                  
          <head>                            
              <meta charset="UTF-8">        
              <title>embed_sample.go</title>
          </head>                           
          <body>                            
              測試嵌入外部文件!             
          </body>                           
          </html>  

          嵌入多個文件

          當(dāng)然,有時候你可能需要嵌入多個文件。這也難不倒//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遍歷并打印出所有嵌入的文件路徑。

          嵌入文本和二進(jìn)制文件

          //go:embed不僅可以嵌入文本文件,還可以嵌入二進(jìn)制文件。

          //go:embed logo.png
          var logo []byte
          	// 嵌入二進(jìn)制數(shù)據(jù)
          	fmt.Printf("Logo size: %d bytes\n", len(logo))


          在這個例子中,我們將一個logo.png文件嵌入到了logo變量中。這個變量是一個字節(jié)切片,可以用來處理二進(jìn)制數(shù)據(jù)。

          go:embed的用法匯總

          為了幫助大家更好地理解//go:embed的用法,下面我們用表格的形式來總結(jié)一下:

          用法類型

          示例代碼

          說明

          單個文件

          //go:embed index.html <br> var indexHTML string

          將單個文件的內(nèi)容嵌入到字符串變量中

          多個文件

          //go:embed static/*.html <br> var staticFiles embed.FS

          使用通配符將多個文件嵌入到文件系統(tǒng)變量中

          嵌入目錄

          //go:embed assets/* <br> var assets embed.FS

          將整個目錄及其子目錄中的所有文件嵌入到文件系統(tǒng)變量中

          二進(jìn)制文件

          //go:embed logo.png <br> var logo []byte

          將二進(jìn)制文件嵌入到字節(jié)切片中


          使用場景

          那么,//go:embed到底有哪些實際的使用場景呢?下面列出了一些常見的應(yīng)用場景,供大家參考:

          1. 嵌入靜態(tài)網(wǎng)站:將HTML、CSS、JavaScript文件嵌入到Go程序中,打造一個無需依賴外部文件的靜態(tài)網(wǎng)站。
          2. 嵌入配置文件:將配置文件嵌入到程序中,確保配置的一致性和安全性。
          3. 嵌入圖像和字體:將圖像、字體等資源嵌入到程序中,避免路徑問題和文件丟失。
          4. 嵌入SQL腳本:將數(shù)據(jù)庫初始化腳本嵌入到程序中,方便數(shù)據(jù)庫的自動化部署。

          完整示例

          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
          	})
          
          	// 嵌入二進(jìn)制數(shù)據(jù)
          	fmt.Printf("Logo size: %d bytes\n", len(logo))
          }
          

          總結(jié)

          好了,小伙伴們,我們今天的Golang Embed Directive之旅就到這里了。希望通過這篇文章,你能夠?qū)?/go:embed有一個全面的了解,并能夠在實際項目中靈活運用這個特性。

          如果你覺得這篇文章對你有所幫助,別忘了點贊、評論和關(guān)注哦!你的支持是我們不斷創(chuàng)作優(yōu)質(zhì)內(nèi)容的動力!


          主站蜘蛛池模板: 无码人妻一区二区三区在线视频| 国产成人精品一区二区三区| 中文字幕一区二区区免| 国产精品自拍一区| 精品国产毛片一区二区无码| 国内精品视频一区二区八戒| 久久精品免费一区二区| 精品性影院一区二区三区内射| 成人午夜视频精品一区| 免费人妻精品一区二区三区| 日韩精品午夜视频一区二区三区| 国产主播福利一区二区| 2022年亚洲午夜一区二区福利| 国产无线乱码一区二三区| 一区二区三区人妻无码| 日韩一区二区三区视频| а天堂中文最新一区二区三区| 动漫精品第一区二区三区| 国产无吗一区二区三区在线欢| 亚洲变态另类一区二区三区| 亚洲一区二区三区丝袜| 亚洲Av永久无码精品一区二区| 人妻少妇精品视频三区二区一区| 日韩中文字幕一区| 在线观看一区二区精品视频| 国产乱人伦精品一区二区在线观看| 无码国产精品久久一区免费| 男人的天堂av亚洲一区2区| 成人一区专区在线观看| 波多野结衣一区二区免费视频| 波多野结衣一区二区免费视频| 国产一区二区三区在线免费| 一区二区三区免费在线视频 | 怡红院AV一区二区三区| 暖暖免费高清日本一区二区三区| 国产AV天堂无码一区二区三区| 搜日本一区二区三区免费高清视频| 亚洲日本一区二区一本一道| 国产一区二区免费| 亚洲综合一区无码精品| 激情啪啪精品一区二区|