2016-11-26 19 views
0

我想设置一个API在golang,对于特定的需求,我希望能够有一个环境变量,将包含一个URL作为字符串(即:“https://subdomain .api.com/版本/query“),我希望能够修改API调用中的粗体部分。可变内部可以动态改变的字符串

我对如何实现这一目标毫无头绪。

感谢您的时间,

保罗

+1

可能的重复:答案在这个问题:[Golang:格式字符串没有打印?](http://stackoverflow.com/questions/11123865/golang-format-a-string-without-printing/31742265# 31742265) – icza

+0

好吧,我可能不够详细,但我的目标是建立一个函数,使我可以轻松地建立自定义URL并以一种理智/可读的方式 – MEGADEVOPS

回答

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) } 
0

最简单的方法是使用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包。