String 在golang中实现动态字符串
我有以下全局字符串String 在golang中实现动态字符串,string,go,String,Go,我有以下全局字符串 studentName := "Hi ? ,Welcome" 现在我想动态地获取这个字符串 func returnName(name string) string{ return studentName+name } 此函数应将字符串返回为 Hi name,welcome. 字符串应该从参数中取名,返回动态字符串。在Gangon中实现这个最好的方法是什么? < p>可以考虑函数 用“1”替换在studentName中找到的第一个“?” Replace返回stud
studentName := "Hi ? ,Welcome"
现在我想动态地获取这个字符串
func returnName(name string) string{
return studentName+name
}
此函数应将字符串返回为
Hi name,welcome.
字符串应该从参数中取名,返回动态字符串。在Gangon中实现这个最好的方法是什么?
< p>可以考虑函数 用“1”替换在studentName
中找到的第一个“?”Replace返回
studentName
的副本,其中“?”
替换为name
这严格尊重原始问题(具有确切内容的全局var)
现在,如果您开始更改问题,例如使用不同的内容(一个全局变量
studentName:=“Hi%s,Welcome”
),那么您可以使用as in's
这将使用格式“verbs”
%s
,这是字符串的默认格式。假设全局字符串总是相同的,您可以这样做
func returnName(name string) string {
buf := bytes.Buffer{}
buf.WriteString("Hi ")
buf.WriteString(name)
buf.WriteString(", welcome")
return buf.String()
}
或
如果字符串是动态模板,如果没有其他?
标记或Sprintf的话,您可以使用模板包或简单替换,如果您的输入变得更大(更复杂),或者如果您需要多次替换不同的值,那么模板会更有效、更干净、更灵活。看看包裹
template
包对模板进行一次解析,从中构建一个树,一旦需要替换值,它就会动态构建输出
看看这个例子:
const templ = `Hi {{.Name}}!
Welcome {{.Place}}.
Please bring {{.ToBring}}
`
您可以使用以下行解析此类模板:
t := template.Must(template.New("").Parse(templ))
将其输入数据准备为结构
或映射
:
data := map[string]string{
"Name": "Bob",
"Place": "Home",
"ToBring": "some beers",
}
您可以通过以下方式获得结果:
下面是一个完整的、可运行的示例:(在桌面上试用)
输出:
Hi Bob!
Welcome Home.
Please bring some beers
Hi Alice!
Welcome Home.
Please bring a Teddy Bear
以字符串的形式获取结果
:
Hi Bob!
Welcome Home.
Please bring some beers
Hi Alice!
Welcome Home.
Please bring a Teddy Bear
如果要将结果作为字符串
,可以将结果写入,并使用Buffer.string()
方法获取字符串
:
buf := bytes.Buffer{}
t.Execute(&buf, data)
var result string = buf.String()
完成程序(在上尝试):
如果你想保持简单,你可以使用
fmt.Sprintf
studentName := fmt.Sprintf("Hi, %s! Welcome.", name)
%s
部分将被name的值替换,这是最简单的解决方案:)这是最简单最明显的解决方案,除非需要复杂的模板,否则没有理由不选择此模板,OPI认为fmt.Sprintf
是最好的方法,如果您没有任何复杂的模板处理要做。是的,thanx用于通知:)
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))
t.Execute(os.Stdout, data) // Prints result to the standard output
// Now change something:
data["Name"] = "Alice"
data["ToBring"] = "a Teddy Bear"
t.Execute(os.Stdout, data)
}
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
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{}
t.Execute(&buf, data)
return buf.String()
}
const templ = `
Hi {{.Name}}!
Welcome {{.Place}}.
Please bring {{.ToBring}}
`
studentName := fmt.Sprintf("Hi, %s! Welcome.", name)