整合營銷服務(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)容的動力!


          主站蜘蛛池模板: 精品国产伦一区二区三区在线观看| 好爽毛片一区二区三区四无码三飞| 久久亚洲AV午夜福利精品一区| 成人日韩熟女高清视频一区| 亚洲午夜日韩高清一区| 国产成人AV一区二区三区无码| 一区二区在线观看视频| 日本一区二区三区免费高清| 国产一区中文字幕在线观看| 日韩精品一区二区午夜成人版| 天堂国产一区二区三区| 国产综合无码一区二区色蜜蜜| 国产午夜精品一区二区三区| 精品国产亚洲一区二区三区在线观看 | 国内精品无码一区二区三区| 日韩国产精品无码一区二区三区| 无码一区二区三区在线| 久久se精品动漫一区二区三区| 日本免费一区二区三区最新 | 日本一区二区三区日本免费| 久久精品视频一区二区三区| 无码AV一区二区三区无码| 精品国产鲁一鲁一区二区| 男插女高潮一区二区| 亚洲一区二区三区在线观看蜜桃| 成人免费区一区二区三区| 久久99国产一区二区三区| 国产成人片视频一区二区| 日本一区二区三区中文字幕| 一区二区三区视频在线播放| 亚洲综合一区二区三区四区五区| 色欲AV蜜臀一区二区三区| 亚洲爆乳精品无码一区二区三区| 无码中文人妻在线一区| 精品亚洲一区二区三区在线播放| 国产精品一区二区综合| 国产福利电影一区二区三区久久老子无码午夜伦不 | 精品少妇一区二区三区视频| 国产一区二区三区在线2021| 国产一区二区三区乱码网站| 亚洲色偷精品一区二区三区|