【问题标题】:String with variable inside that can dynamically change内部带有变量的字符串,可以动态更改
【发布时间】:2016-11-27 01:16:33
【问题描述】:

我正在尝试在golang 中设置 API,为了满足特定需求,我希望能够拥有一个包含 URL 作为字符串的环境变量(即:“https://子域.api.com/version/query") 并且我希望能够在 API 调用中修改粗体部分。

我不知道如何实现这一目标。

感谢您的宝贵时间,

保罗

【问题讨论】:

  • 可能重复:答案在这个问题中:Golang: format a string without printing?
  • 不是真的,我可能不够详细,但我的目标是构建一个函数,使我能够轻松地以理智/可读的方式构建自定义 URL

标签: api go


【解决方案1】:

有很多方法,一种是允许从环境中配置 URL,然后在运行时动态配置 url,那就是使用模板。

您可以期待来自 ENV 的 template

apiUrlFromEnv := "https://{{.Subdomin}}.api.com/{{.Version}}/query" // get from env

根据文档修改:

type API struct {
    Subdomain string
    Version   string
}
api := API{"testapi", "1.1"}
tmpl, err := template.New("api").Parse(apiUrlFromEnv)
if err != nil { panic(err) }
err = tmpl.Execute(os.Stdout, api) // write to buffer so you can get a string?
if err != nil { panic(err) }

【讨论】:

    【解决方案2】:

    最简单的方法是使用fmt.Sprintf

    fmt.Sprintf(format string, a ...interface{}) string

    如您所见,此函数返回一个新格式的string,这是内置库。此外,您可以使用索引在模板中放置参数:

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

    fmt.Sprintf("%[2]d %[1]d %d[2]\n", 11, 22)

    但如果你想使用命名变量,你应该使用text/template 包。

    【讨论】:

      猜你喜欢
      • 2022-01-14
      • 1970-01-01
      • 2013-01-08
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-18
      • 1970-01-01
      相关资源
      最近更新 更多