【问题标题】:How to merge multiple strings and int into a single string如何将多个字符串和int合并成一个字符串
【发布时间】:2016-02-25 00:14:09
【问题描述】:

我是围棋新手。我找不到任何官方文档显示如何将多个字符串合并为一个新字符串。

我的期望:

输入"key:""value"", key2:"100

输出"Key:value, key2:100"

如果可能的话,我想使用+ 来合并字符串,例如 Java 和 Swift。

【问题讨论】:

标签: string go


【解决方案1】:

我喜欢使用 fmt 的Sprintf 方法来处理这类事情。它像 Go 或 C 中的 Printf 一样工作,只是它返回一个字符串。这是一个例子:

output := fmt.Sprintf("%s%s%s%d", "key:", "value", ", key2:", 100)

转到fmt.Sprintf 的文档

【讨论】:

  • 最后一个是int number。我可以使用 %d 吗?
  • @RobertYiJiang 是的,事实上我会用它来编辑。没有意识到我在那里改变了输入的类型。
【解决方案2】:

您可以使用 strings.Join,它的速度几乎是 fmt.Sprintf 的 3 倍。但是它的可读性可能会降低。

output := strings.Join([]string{"key:", "value", ", key2:", strconv.Itoa(100)}, "")

https://play.golang.org/p/AqiLz3oRVq

strings.Join 与 fmt.Sprintf

BenchmarkFmt-4       2000000           685 ns/op
BenchmarkJoins-4     5000000           244 ns/op

缓冲区

如果您需要合并大量字符串,我会考虑使用缓冲区而不是上面提到的那些解决方案。

【讨论】:

  • 好吧,如果你使用 strconv.Itoa 那么你也可以用 + 连接字符串
  • @ColinPitrat 由于 go 编译器的问题,strings.Join 的 2 或 3 个元素使用 +,但在此之上,它会创建一个字节切片以实现更有效的连接。如果要连接两个以上的元素,我强烈建议使用 strings.Join。
【解决方案3】:

你可以这样做:

package main

    import (
        "fmt" 
        "strconv"
    )
    
    func main() {

         
         result:="str1"+"str2"+strconv.Itoa(123)+"str3"+strconv.Itoa(12)
         fmt.Println(result)
         
    }

使用 fmt.Sprintf()

var s1="abc"
var s2="def"
var num =100
ans:=fmt.Sprintf("%s%d%s", s1,num,s2);
fmt.Println(ans);

【讨论】:

    【解决方案4】:

    你可以使用text/template:

    package main
    
    import (
       "text/template"
       "strings"
    )
    
    func format(s string, v interface{}) string {
       t, b := new(template.Template), new(strings.Builder)
       template.Must(t.Parse(s)).Execute(b, v)
       return b.String()
    }
    
    func main() {
       s := struct{
          Key string
          Key2 int
       }{"value", 100}
       f := format("key:{{.Key}}, key2:{{.Key2}}", s)
       println(f)
    }
    

    fmt.Sprint:

    package main
    import "fmt"
    
    func main() {
       s := fmt.Sprint("key:", "value", ", key2:", 100)
       println(s)
    }
    

    【讨论】:

      【解决方案5】:

      下面是 Go Lang 中字符串和整数组合的简单方法(版本:go1.18.1 最新)

      package main
      
      import (
          "fmt"
          "io"
          "os"
      )
      
      func main() {
          const name, age = "John", 26
          s := fmt.Sprintf("%s is %d years old.\n", name, age)
          io.WriteString(os.Stdout, s) // Ignoring error for simplicity.
      }
      

      输出:

      约翰 26 岁。

      【讨论】:

      • 参考和文档链接:go.dev
      猜你喜欢
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      • 2012-02-02
      • 2020-09-26
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 2020-01-29
      相关资源
      最近更新 更多