当前位置: 首页 > 面试题库 >

用相同的变量替换Sprintf中的所有变量

华阳秋
2023-03-14
问题内容

是否可以使用fmt.Sprintf()相同的值替换格式化字符串中的所有变量?

就像是:

val := "foo"
s := fmt.Sprintf("%v in %v is %v", val)

会回来的

"foo in foo is foo"

问题答案:

有可能,但是必须修改格式字符串,必须使用 显式参数索引

显式参数索引:

在Printf,Sprintf和Fprintf中,默认行为是为每个格式化动词格式化在调用中传递的连续参数。但是,动词前的符号[n]表示第n个单索引参数将被格式化。宽度或精度的’*’之前的相同符号选择保存该值的参数索引。在处理了带括号的表达式[n]后,除非另外指出,否则后续动词将使用自变量n
+ 1,n + 2等。

你的例子:

val := "foo"
s := fmt.Sprintf("%[1]v in %[1]v is %[1]v", val)
fmt.Println(s)

输出(在Go Playground上尝试):

foo in foo is foo

当然,上面的示例可以简单地写成一行:

fmt.Printf("%[1]v in %[1]v is %[1]v", "foo")

另外,为简化起见,第一个显式参数索引可能会省略,因为它默认为1

fmt.Printf("%v in %[1]v is %[1]v", "foo")


 类似资料:
  • 如何用updateNum变量替换price的值(存储在number变量中)。 如果我在价格值下面的代码没有更新之后打印数据框架,但是如果我打印updateNum变量,它将显示正确更新的变量。

  • 问题内容: 如果我从脚本运行以下命令: 没事。 但是,如果我运行: 我在教程中读到,要从shell替换环境变量,您需要先停止操作,然后对部分进行“引用”,以便不直接替换该部分,这是我所做的,并且仅当该变量在紧接之前定义时才起作用。 我如何被s识别为shell中定义的环境变量? 问题答案: 您的两个示例看起来相同,这使问题难以诊断。潜在问题: 您可能需要双引号,例如 可能包含一个斜杠,在这种情况下,

  • 功能文件-1 场景大纲:Lambda API注册 给定url ApiAdminURL 功能文件-2 给定url internalGateway 和路径 这不是将#(LocalVersion)替换为v1

  • 问题内容: 我怎样才能做到这一点? 它将替换为文本。但是我想用变量的内容替换它。 我尝试过 它也不起作用。 问题答案: 您需要使用双引号: 您的单引号可防止将shell变量替换为其内容。

  • 有没有办法做到这一点?

  • 我正在尝试配置Wiremock映射,以从请求中返回一个带有值的JSON响应。 请求很简单 它的映射是: 我收到回复: 而预期的是: 如果我切换到XML请求,模式