Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 在golang中实现动态字符串_String_Go - Fatal编程技术网

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)