1. 使用 +
运算符(最简单的方式)
str1 := "Hello"
str2 := "World"
result := str1 + ", " + str2 + "!"
fmt.Println(result) // 输出: Hello, World!
特点:
-
简单直观
-
适合少量字符串拼接
-
每次拼接都会创建新字符串,性能较差(不适合大量拼接)
2. 使用 fmt.Sprintf
(格式化拼接)
name := "Alice"
age := 25
result := fmt.Sprintf("My name is %s and I'm %d years old.", name, age)
fmt.Println(result) // 输出: My name is Alice and I'm 25 years old.
特点:
-
支持格式化输出
-
代码可读性好
-
性能比
+
稍好,但仍不是最高效的方式
3. 使用 strings.Join
(适合拼接字符串切片)
words := []string{"Go", "is", "awesome"}
result := strings.Join(words, " ")
fmt.Println(result) // 输出: Go is awesome
特点:
-
高效拼接字符串切片
-
可以指定分隔符
-
需要预先准备好所有字符串
4. 使用 bytes.Buffer
(高性能方式)
var buffer bytes.Buffer
buffer.WriteString("Hello")
buffer.WriteString(", ")
buffer.WriteString("World")
buffer.WriteString("!")
result := buffer.String()
fmt.Println(result) // 输出: Hello, World!
特点:
-
高性能,适合大量字符串拼接
-
内存分配次数少
-
代码稍显冗长
5. 使用 strings.Builder
(Go 1.10+ 推荐)
var builder strings.Builder
builder.WriteString("Hello")
builder.WriteString(", ")
builder.WriteString("Gopher")
result := builder.String()
fmt.Println(result) // 输出: Hello, Gopher
特点:
-
性能最优(比
bytes.Buffer
更好) -
专门为字符串拼接优化
-
不可重置(每次需要新建)
性能比较
从高到低排序:
-
strings.Builder
-
bytes.Buffer
-
strings.Join
-
fmt.Sprintf
-
+
运算符
实践建议
-
少量简单拼接:使用
+
或fmt.Sprintf
-
大量字符串拼接:使用
strings.Builder
-
拼接字符串切片:使用
strings.Join
-
需要格式化输出:使用
fmt.Sprintf