golang常用庫之-標準庫text/template

文章目錄

  • golang常用庫之-標準庫text/template
    • 背景
    • 什么是text/template
    • text/template庫的使用

golang常用庫之-標準庫text/template

背景

在許多編程場景中,我們經常需要把數據按照某種格式進行輸出,比如生成HTML頁面,或者生成配置文件。這時,我們就需要模板引擎的幫助。幸運的是,Go語言在標準庫中就提供了兩個強大的模板引擎:text/template和html/template。

什么是text/template

text/template是Go語言標準庫中的一個強大工具,用于生成文本輸出。它允許你定義模板,然后將數據填充到模板中,非常適合生成報告、配置文件、HTML等。

text/template庫的使用

text/template庫用于生成任何基于文本的格式。它使用雙大括號{{和}}來定義模板的動態部分。讓我們通過一個簡單的例子來看一下它的使用方法。

  1. 簡單的字符串插值
package mainimport ("os""text/template"
)func main() {// 定義模板tmpl := template.Must(template.New("test").Parse("你好,{{.Name}}!今天是{{.Date}}。\n"))// 準備數據data := struct {Name stringDate string}{Name: "張三",Date: "2025年5月1日",}// 執行模板并輸出到標準輸出err := tmpl.Execute(os.Stdout, data)if err != nil {panic(err)}
}

package mainimport ("os""text/template"
)func main() {// 顯式創建template.Template對象var tmpl *template.Templatetmpl = template.New("hello")// 解析模板內容tmpl, err := tmpl.Parse("你好,{{.Name}}!今天是{{.Date}}。\n")if err != nil {panic(err)}// 準備數據data := struct {Name stringDate string}{Name: "張三",Date: "2025年5月2日",}// 執行模板err = tmpl.Execute(os.Stdout, data)if err != nil {panic(err)}
}
  1. 使用循環(range)
package mainimport ("os""text/template"
)func main() {// 定義模板const templateText = `
我的購物清單:
{{range .Items}}
- {{.}}
{{end}}總計: {{.Count}}項
`tmpl := template.Must(template.New("list").Parse(templateText))// 準備數據data := struct {Items []stringCount int}{Items: []string{"蘋果", "香蕉", "橙子", "牛奶"},Count: 4,}// 執行模板err := tmpl.Execute(os.Stdout, data)if err != nil {panic(err)}
}
  1. 條件語句(if-else)
package mainimport ("os""text/template"
)func main() {// 定義模板const templateText = `
{{if .Success}}
? 操作成功: {{.Message}}
{{else}}
? 操作失敗: {{.Message}}
{{end}}狀態碼: {{.Code}}
`tmpl := template.Must(template.New("status").Parse(templateText))// 準備數據 - 成功案例success := struct {Success boolMessage stringCode    int}{Success: true,Message: "數據已保存",Code:    200,}// 執行模板tmpl.Execute(os.Stdout, success)// 失敗案例failure := struct {Success boolMessage stringCode    int}{Success: false,Message: "服務器錯誤",Code:    500,}tmpl.Execute(os.Stdout, failure)
}
  1. 自定義函數
package mainimport ("os""strings""text/template""time"
)func main() {// 創建模板并添加自定義函數funcMap := template.FuncMap{"upper":     strings.ToUpper,"formatDate": func(t time.Time) string {return t.Format("2006年01月02日")},}tmpl := template.New("funcs")tmpl.Funcs(funcMap)// 解析模板tmpl, err := tmpl.Parse(`
用戶: {{.Name | upper}}
注冊時間: {{.RegisterDate | formatDate}}
`)if err != nil {panic(err)}// 準備數據data := struct {Name         stringRegisterDate time.Time}{Name:         "李四",RegisterDate: time.Date(2024, 3, 15, 0, 0, 0, 0, time.UTC),}// 執行模板err = tmpl.Execute(os.Stdout, data)if err != nil {panic(err)}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/81853.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81853.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81853.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux btop 使用教程

簡介 btop 是一個基于終端的現代系統資源監控器,具有美觀的圖形界面、響應快、功能豐富等特點。它支持查看 CPU、內存、磁盤、網絡、進程,并可以方便地篩選和管理進程。 功能總覽 啟動命令: btop界面分為以下幾部分: CPU 區域…

Vue3調度器錯誤解析,完美解決Unhandled error during execution of scheduler flush.

目錄 Vue3調度器錯誤解析,完美解決Unhandled error during execution of scheduler flush. 一、問題現象與本質 二、七大高頻錯誤場景與解決方案 1、Setup初始化陷阱 2、模板中的"幽靈屬性" 3、異步操作的"定時炸彈" 4、組件嵌套黑洞 5…

使用DeepSeek定制Python小游戲——以“俄羅斯方塊”為例

前言 本來想再發幾個小游戲后在整理一下流程的,但是今天試了一下這個俄羅斯方塊的游戲結果發現本來修改的好好的的,結果后面越改越亂,前面的版本也沒保存,根據AI修改他是在幾個版本改來改去,想著要求還是不能這么高。…

Kotlin帶接收者的Lambda介紹和應用(封裝DialogFragment)

先來看一個具體應用:假設我們有一個App,App中有一個退出應用的按鈕,點擊該按鈕后并不是立即退出,而是先彈出一個對話框,詢問用戶是否確定要退出,用戶點了確定再退出,點取消則不退出,…

ES6/ES11知識點 續一

模板字符串 在 ECMAScript(ES)中,模板字符串(Template Literals)是一種非常強大的字符串表示方式,它為我們提供了比傳統字符串更靈活的功能,尤其是在處理動態內容時。模板字符串通過反引號&…

【C++】智能指針RALL實現shared_ptr

個人主頁 : zxctscl 專欄 【C】、 【C語言】、 【Linux】、 【數據結構】、 【算法】 如有轉載請先通知 文章目錄 1. 為什么需要智能指針?2. 內存泄漏2.1 什么是內存泄漏,內存泄漏的危害2.2 內存泄漏分類(了解)2.3 如何…

ROS2 開發踩坑記錄(持續更新...)

1. 從find_package(xxx REQUIRED)說起,如何引用其他package(包) 查看包的安裝位置和include路徑詳細文件列表 例如,xxx包名為pluginlib # 查看 pluginlib 的安裝位置 dpkg -L ros-${ROS_DISTRO}-pluginlib | grep include 這條指令的目的是…

系統思考:困惑源于內心假設

不要懷疑,你的困惑來自你的假設。 你是否曾經陷入過無解的困境,覺得外部環境太復雜,自己的處境無法突破?很多時候,答案并不在于外部的局勢,而是來自我們內心深處的假設——那些我們理所當然、從未質疑過的…

GitHub修煉法則:第一次提交代碼教學(Liunx系統)

前言 github是廣大程序員們必須要掌握的一個技能,萬事開頭難,如果成功提交了第一次代碼,那么后來就會簡單很多。網上的相關資料往往都不是從第一次開始,導致很多新手們會在過程中遇到很多權限認證相關的問題,進而被卡…

瀝青路面裂縫的目標檢測與圖像分類任務

文章題目是《A grid‐based classification and box‐based detection fusion model for asphalt pavement crack》 于2023年發表在《Computer‐Aided Civil and Infrastructure Engineering》 論文采用了一種基于網格分類和基于框的檢測(GCBD)&#xff…

【Flask】ORM模型以及數據庫遷移的兩種方法(flask-migrate、Alembic)

ORM模型 在Flask中,ORM(Object-Relational Mapping,對象關系映射)模型是指使用面向對象的方式來操作數據庫的編程技術。它允許開發者使用Python類和對象來操作數據庫,而不需要直接編寫SQL語句。 核心概念 1. ORM模型…

C/C++滑動窗口算法深度解析與實戰指南

C/C滑動窗口算法深度解析與實戰指南 引言 滑動窗口算法是解決數組/字符串連續子序列問題的利器,通過動態調整窗口邊界,將暴力解法的O(n)時間復雜度優化至O(n)。本文將系統講解滑動窗口的核心原理、C/C實現技巧及經典應用場景,助您掌握這一高…

Vuex使用指南:狀態管理

一、什么是狀態管理?為什么需要 Vuex? 1. 狀態管理的基本概念 在 Vue 應用中,狀態指的是應用中的數據。例如: 用戶登錄狀態購物車中的商品文章列表的分頁信息 狀態管理就是對這些數據的創建、讀取、更新和刪除進行有效管理。 …

【信息系統項目管理師-論文真題】2007下半年論文詳解(包括解題思路和寫作要點)

更多內容請見: 備考信息系統項目管理師-專欄介紹和目錄 文章目錄 試題1:大型項目的計劃與監控1、寫作要點2、解題思路大型信息系統項目的組織制訂大型信息系統項目進度計劃的方法試題2:組織級項目管理的績效考核1、寫作要點2、解題思路在項目考核過程中會遇到哪些問題項目的…

項目管理學習-CSPM(1)

01引言 最近在學習CSPM的課程,有部分的內容自己還是受益匪淺的,建議有需要提升項目管理能力的同學可以以考促學的方式進行學習,下面整理了一部分內容和大家分享和學習。CSPM全稱 China Standards Project Management,中文名項目管…

介紹分治、動態規劃、回溯分別是什么?有什么聯系和區別?給出對象的場景和java代碼?

一、分治算法(Divide and Conquer) 概念: 分治算法是將一個復雜問題分成若干個子問題,每個子問題結構與原問題類似,然后遞歸地解決這些子問題,最后將子問題的結果合并得到原問題的解。 特點:…

解鎖DeepSeek模型微調:從小白到高手的進階之路

目錄 一、DeepSeek 模型初相識二、探秘微調原理2.1 遷移學習基礎2.2 微調的參數更新機制 三、數據準備3.1 數據收集3.2 數據標注3.3 數據預處理 四、模型選擇與加載4.1 選擇合適的預訓練模型4.2 加載模型 五、微調訓練實戰5.1 確定微調策略5.2 設置訓練參數5.3 訓練過程 六、模…

端到端觀測分析:從前端負載均衡到后端服務

前言 我們在做系統運維保障的時候,關注從前端負載均衡到后端服務的流量情況是很有必要的,可以了解每個后端服務實例接收的流量大小,這有助于確定資源分配是否合理,能夠幫助找出后端服務中的性能瓶頸。同時,當系統出現…

Ubuntu下OCC7.9+Qt5 快速搭建3D可視化框架

Ubuntu下OCC7.9+Qt5搭建簡易的項目框架 近兩年國產CAD替代如日中天,而幾何內核作為CAD軟件的核心組件之一,當前有且僅有唯一開源的幾何內核庫即OCCT;這里為各位自立于投入CAD開發或正在學習OCC庫的小伙伴們奉獻上一個快速搭建QT+OCC的項目框架; 本文介紹了Qt5+Occ 顯示幾何…

C++類與對象—下:夯實面向對象編程的階梯

9. 賦值運算符重載 9.1 運算符重載 在 C 里,運算符重載能夠讓自定義類型的對象像內置類型那樣使用運算符,這極大地提升了代碼的可讀性與可維護性。運算符重載本質上是一種特殊的函數,其函數名是 operator 加上要重載的運算符。 下面是運算…