我有这个功能:
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次?
Run Code Online (Sandbox Code Playgroud)import "fmt"显式参数索引:
在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)