因为这是一个高调用函数,如果我const QUERY
在里面或外面声明有什么区别吗fn insert()
?
impl Player {
pub async fn insert(
db: sqlx::PgConnection,
input: &InputPlayer,
) -> Result<Self> {
const QUERY: &str = r#"INSERT INTO "player" ("team_id", "id", "other_fields") VALUES ($1, $2, $3, $4, $5, $6, $7)"#;
let result = sqlx::query_as::<_, Self>(QUERY)
.bind(input.team_id())
.bind(input.id())
.bind(input.other())
.bind(input.other())
.bind(input.other())
.bind(input.other())
.fetch_one(db)
.await?;
Ok(result)
}
}
不管你是在函数内部还是外部声明它,它都会在编译时被评估。因此不应该有任何性能差异。
让我们看一下文档:
您可以通过简单的汇编测试来确认此行为。让我们看看以下代码:
这编译为以下 amd64 程序集:
如您所见,两个字符串最终都位于同一位置 - 作为数据静态存储在生成的二进制文件中。
因此,简短的回答是,没有,没有性能差异,因为在两种情况下它都是位于二进制数据部分某处的静态字符串。