在fmt.Sprintf格式字符串中多次引用相同的参数

3 string-formatting go

我有这个功能:

func getTableCreationCommands(v string) string {
    return `
        CREATE TABLE share_` + v + ` PARTITION OF share FOR VALUES IN (` + v + `);
        CREATE TABLE nearby_` + v + ` PARTITION OF nearby FOR VALUES IN (` + v + `);
    `
}
Run Code Online (Sandbox Code Playgroud)

这有点难以理解......有没有办法使用格式化字符串fmt.Sprintf

像这样的东西:

func getTableCreationCommands(v string) string {
    return fmt.Sprintf(`
        CREATE TABLE share_%v PARTITION OF share FOR VALUES IN (%v);
        CREATE TABLE nearby_%v PARTITION OF nearby FOR VALUES IN (%v);
    `, v, v, v, v)
}
Run Code Online (Sandbox Code Playgroud)

但是不需要通过v4次?

pet*_*rSO 8

包fmt

import "fmt" 
Run Code Online (Sandbox Code Playgroud)

显式参数索引:

在Printf,Sprintf和Fprintf中,默认行为是每个格式化动词用于格式化在调用中传递的连续参数.但是,紧接在动词之前的符号[n]表示要格式化第n个单索引参数.


您可以传递v一次变量.例如,

package main

import "fmt"

func getTableCreationCommands(v string) string {
    return fmt.Sprintf(`
        CREATE TABLE share_%[1]v PARTITION OF share FOR VALUES IN (%[1]v);
        CREATE TABLE nearby_%[1]v PARTITION OF nearby FOR VALUES IN (%[1]v);
    `, v)
}

func main() {
    fmt.Println(getTableCreationCommands(("X")))
}
Run Code Online (Sandbox Code Playgroud)

游乐场:https://play.golang.org/p/DlafU_R_phq

输出:

CREATE TABLE share_X PARTITION OF share FOR VALUES IN (X);
CREATE TABLE nearby_X PARTITION OF nearby FOR VALUES IN (X);
Run Code Online (Sandbox Code Playgroud)

  • 我猜它以“1”开头,因为“0-th”是格式字符串 (3认同)