通过替换相同的子字符串来格式化字符串

时间:2017-08-28 13:03:54

标签: go

我的代码如下:

const query = `select * 
               from %s.dbo.table1 
               join %s.dbo.table2
                 on ....
               join %s.dbo.table3
                 on ....
               join %s.dbo.table4
                 on ....`

 fmt.Sprintf(query, dbName, dbName, dbName, dbName)

我只是通过将数据库名称插入所有%s次出现来创建SQL查询。如果不重复dbName,这是更好的方法吗?

1 个答案:

答案 0 :(得分:6)

使用%[1]s

const query = `select * 
           from %[1]s.dbo.table1 
           join %[1]s.dbo.table2
             on ....
           join %[1]s.dbo.table3
             on ....
           join %[1]s.dbo.table4
             on ....`
q := fmt.Sprintf(query, dbName)

游乐场:https://play.golang.org/p/2DDiGfxLPk

文档:https://golang.org/pkg/fmt/

  

例如,

fmt.Sprintf("%[2]d %[1]d\n", 11, 22)
     

将产生" 22 11",而

fmt.Sprintf("%[3]*.[2]*[1]f", 12.0, 2, 6)
     

相当于

fmt.Sprintf("%6.2f", 12.0)
     

会产生" 12.00&#34 ;. (...)