我有一个全局字符串,
studentName := "Hi ? ,Welcome"现在我想动态地接受这个字符串
func returnName(name string) string{
return studentName+name
}此函数应将字符串返回为
Hi name,welcome.字符串应该从参数中取名称,并返回动态string.What是在golang中实现这一功能的最佳方法。
发布于 2015-03-16 08:05:47
如果您想保持简单,您可能只需使用fmt.Sprintf。
studentName := fmt.Sprintf("Hi, %s! Welcome.", name)%s部件将被name的值替换。
发布于 2015-03-16 07:22:53
如果您的输入变得更大(更复杂),或者需要多次替换不同的值,那么模板就会更有效、更干净和更灵活。查看text/template包。
template包只解析你的模板一次,从它构建一棵树,一旦你需要替换值,它就会动态地生成输出。
看一下这个例子:
const templ = `Hi {{.Name}}!
Welcome {{.Place}}.
Please bring {{.ToBring}}
`您可以使用以下行解析这样的模板:
t := template.Must(template.New("").Parse(templ))将其输入数据准备为struct或map
data := map[string]string{
"Name": "Bob",
"Place": "Home",
"ToBring": "some beers",
}您可以使用Template.Execute()获得结果。
err := t.Execute(os.Stdout, data) // Prints result to the standard output,以下是完整的、可运行的示例:(在围棋游乐场上尝试)
package main
import (
"os"
"text/template"
)
func main() {
data := map[string]string{
"Name": "Bob",
"Place": "Home",
"ToBring": "some beers",
}
t := template.Must(template.New("").Parse(templ))
if err := t.Execute(os.Stdout, data); err != nil { // Prints result to the standard output
panic(err)
}
// Now change something:
data["Name"] = "Alice"
data["ToBring"] = "a Teddy Bear"
if err := t.Execute(os.Stdout, data); err != nil {
panic(err)
}
}
const templ = `
Hi {{.Name}}!
Welcome {{.Place}}.
Please bring {{.ToBring}}
`输出:
Hi Bob!
Welcome Home.
Please bring some beers
Hi Alice!
Welcome Home.
Please bring a Teddy Bear作为一个string**:**获取结果的
如果要将结果作为string,可以将结果写入bytes.Buffer并使用Buffer.String()方法获取string:
buf := bytes.Buffer{}
t.Execute(&buf, data)
var result string = buf.String()完成程序(在围棋游乐场上尝试):
package main
import (
"bytes"
"fmt"
"text/template"
)
func main() {
data := map[string]string{
"Name": "Bob",
"Place": "Home",
"ToBring": "some beers",
}
fmt.Print(Execute(data))
}
var t = template.Must(template.New("").Parse(templ))
func Execute(data interface{}) string {
buf := bytes.Buffer{}
if err := t.Execute(&buf, data); err != nil {
fmt.Println("Error:", err)
}
return buf.String()
}
const templ = `
Hi {{.Name}}!
Welcome {{.Place}}.
Please bring {{.ToBring}}
`发布于 2015-03-16 07:07:07
您可以考虑函数strings.Replace
return Replace(studentName, "? ", name, 1)用'1‘代替第一个"?“它在studentName中找到。
“替换”返回studentName的副本,"? "替换为name。
这严格地尊重原始问题(包含确切内容的全局var )。
现在,如果您开始更改这个问题,比如使用一个不同的内容(一个全局变量studentName := "Hi %s ,Welcome"),那么您可以使用fmt.Sprintf(),就像425的回答中一样。
return fmt.Sprintf(studentName, name)它将使用格式‘谓词’%s (字符串的默认格式)。
https://stackoverflow.com/questions/29071212
复制相似问题