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



我有这个函数:

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 + `);
`
}

它有点不稳定。。。有没有一种方法可以使用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)
}

但不需要通过CCD_ 2 4次?

包fmt

import "fmt" 

显式参数索引:

在Printf、Sprintf和Fprintf中,默认行为为格式化谓词以格式化调用中传递的连续参数。然而,动词前面的符号[n]表示第n个索引为one的参数将改为格式化。


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

package main
import "fmt"
func getTableCreationCommands(s 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);
`, s)
}
func main() {
fmt.Println(getTableCreationCommands(("X")))
}

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

输出:

CREATE TABLE share_X PARTITION OF share FOR VALUES IN (X);
CREATE TABLE nearby_X PARTITION OF nearby FOR VALUES IN (X);

您也可以使用text/template:

package same
import (
"strings"
"text/template"
)
func getTableCreationCommands(v string) string {
t, b := new(template.Template), new(strings.Builder)
template.Must(t.Parse(`
CREATE TABLE nearby_{{.}} PARTITION OF nearby FOR VALUES IN ({{.}});
CREATE TABLE share_{{.}} PARTITION OF share FOR VALUES IN ({{.}});
`)).Execute(b, v)
return b.String()
}

https://pkg.go.dev/text/template

最新更新