You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust如何创建可后续传入参数插值的format!兼容字符串模板

解决方案

首先明确一个前提:Rust 的 format! 系列宏是编译期执行的,它要求第一个格式参数必须是编译期可确定的字符串字面量,你从服务端运行时获取的动态 String 不可能直接作为 format! 的格式参数使用,因此你需要用运行时字符串替换的方案来实现需求。

针对你当前只有1个插值占位符的场景,完全可以不用引入任何第三方库,用原生字符串方法就能实现极简的满足需求的方案:

步骤1:统一模板占位符格式

你只需要和服务端约定统一用 {} 作为唯一的插值占位符即可,默认模板也对齐这个规则:

#[derive(Serialize,Deserialize,Clone,Debug)]
struct Message {
  text: String
}

impl Default for Message {
  fn default() -> Self {
    Self { 
      text: "Hello {}, how are you?".to_string()
    }
  }
}

步骤2:实现插值方法

给 Message 结构体实现一个轻量的渲染方法,直接替换占位符即可:

impl Message {
    /// 传入参数完成模板插值,仅替换第一个`{}`占位符
    pub fn render(&self, param: &str) -> String {
        self.text.replacen("{}", param, 1)
    }
}

步骤3:调用示例

let my_message: Message = get_message_template();
// 完成插值得到最终字符串
let final_text = my_message.render("John");

方案优势

  • 无任何额外依赖,比引入重型模板库轻量非常多
  • 完全匹配你当前单占位符的需求,replacen 指定替换1次,即使模板意外出现多个 {} 也不会出错
  • 容错性高,就算服务端返回的模板没有占位符,也会直接返回原字符串不会报错

如果后续你需要支持多占位符的场景,也可以基于这个思路扩展替换规则即可,不用引入重型模板库。

内容的提问来源于stack exchange,提问作者Avba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 22:24:02