Go html/template 互換を Rust で扱う。
go_html_template は Go の html/template に近い API と挙動を Rust で提供するクレートです。テンプレート構文、パイプライン、文脈依存エスケープ、危険 URL スキーム遮断などの主要機能を実装しています。
Go ライクなテンプレート API
Template::new(...).parse(...).execute(...) の流れで、define/template/range/with/pipeline を利用できます。
文脈依存エスケープ
HTML本文・属性・URL・script/style の文脈を解析し、危険な javascript: スキームを URL 属性で拒否します。
web-rust 向け制約
web-rust feature 有効時は parse_files/parse_glob/parse_fs を無効化し、メモリ上テンプレート運用に寄せられます。
セットアップと基本利用
まず crate を追加し、Template::parse と execute_to_string で最小実行を確認します。web-rust 環境ではファイル読み込み系 API ではなく、文字列テンプレートを使ってください。
インストール
cargo add go_html_template
Rust例
src/main.rs
use go_html_template::{Template, Value};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let tpl = Template::new("page")
.parse(r#"<h1>{{.Title}}</h1>\n<p>{{.Body | safe_html}}</p>"#)?;
let out = tpl.execute_to_string(&serde_json::json!({
"Title": "go_html_template",
"Body": "<em>trusted</em>"
}))?;
println!("{out}");
Ok(())
}
互換性ステータス
現状の go_html_template は 主要ワークフロー実装済みだが互換性を継続的に詰めている段階 です。Go html/template との完全 1:1 互換ではないため、導入時は差分検証を行ってください。
前へ
OSS一覧