为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕村9548890 2023-05-04 16:02:54
我有这个功能: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)}但不需要通过v4 次?
查看完整描述

2 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

包 fmt

import "fmt"

显式参数索引:

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


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);


查看完整回答
反对 回复 2023-05-04
?
繁花如伊

TA贡献2012条经验 获得超12个赞

你也可以使用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




查看完整回答
反对 回复 2023-05-04
  • 2 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信