首页 > 解决方案 > 格式化包含'%' golang 的字符串

问题描述

我有一个如下所示的 SQL 查询:

SELECT name FROM sessions WHERE name ILIKE 'org_name.%';

但我实际上对用格式字符串 (%s) 替换 'org_name' 很感兴趣。
我试图做这样的事情:

query := fmt.Sprintf("SELECT name FROM sessions WHERE name ILIKE '%s.%'", "org_name2")

但是 go 似乎不喜欢它,因为写入 %' 作为格式字符串无效。
我知道我可以通过这种方式解决它:

orgName := "org_name2"
condition := fmt.Sprintf("%s", orgName) + ".%"
query := fmt.Sprintf("SELECT name FROM sessions WHERE name ILIKE '%s'", condition)


但是,我宁愿不这样做,因为这里的变量只是 org_name。
有解决方案吗?
谢谢!

标签: stringgostring-formattingqsqlquery

解决方案


fmt包中所述,文字%可以用%%printf 格式字符串表示:

query := fmt.Sprintf("SELECT name FROM sessions WHERE name ILIKE '%s.%%'", orgName)

但是请注意,您永远不应该以这种方式构建您的 SQL 查询!您可能会为SQL 注入攻击敞开心扉。相反,您应该传递参数化参数:

query := "SELECT name FROM sessions WHERE name ILIKE ?"
rows, err := db.Query(query, orgName + ".%")

推荐阅读