如何在 Go 中高效地串聯字串

Suraj Joshi 2023年1月30日
  1. 使用加號(+)運算子
  2. Print() 函式中有多個引數
  3. strings.Join 函式來串聯字串
  4. Sprintf() 方法
  5. bytes.Buffer 方法
  6. strings.Builder 方法
  7. += 運算子串聯字串
  8. 不同方法的比較
如何在 Go 中高效地串聯字串

將兩個或多個字串合併為一個新的字串的行為稱為字串串聯。字串連線是程式設計中執行最廣泛的操作之一。在本文中,我們將討論使用 Go 程式語言連線字串的各種方法及其優缺點。

使用加號(+)運算子

使用 + 運算子是最簡單且使用最廣泛的字串連線方法。有時,+ 運算子也稱為串聯運算子。

package main

import "fmt"

func main() {

    str_1 := "Welcome to "
    str_2 := "the Blog!!"
    fmt.Println("str_1: ", str_1)
    fmt.Println("str_2: ", str_2)
    fmt.Println("Combined String: ", str_1+str_2)
}

輸出:

str_1:  Welcome to 
str_2:  the Blog!!
Combined String:  Welcome to the Blog!!

Print() 函式中有多個引數

我們可以將多個字串作為引數傳遞給 Go 語言中的 Print() 函式。通過在字串之間新增空格將字串自動串聯在一起。

package main

import "fmt"

func main() {

    fmt.Println("String", "Concatenation!!")
}      

輸出:

String Concatenation!!

strings.Join 函式來串聯字串

我們還可以使用字串包中存在的 join() 函式來連線字串,該函式需要一個字串切片和一個分隔符將它們連線起來以產生單個字串。

Go strings.Join 語法:

func Join(str []string, sep string) string

其中,str 是我們用來連線元素的字串切片,而 sep 是放置在切片之間的分隔符。

   package main

import (
    "fmt"
    "strings" //for join() function
)

func main() {

    str_slices := []string{"This", "is",
        "String", "Concatenation!!"}

    str_concat := strings.Join(str_slices, "-")
    fmt.Println(str_concat)
}
  

輸出:

This-is-String-Concatenation!!

Sprintf() 方法

fmt 包中使用 Sprintf() 方法也是字串連線的最簡單方法之一。

package main

import "fmt"

func main() {
    str_1 := "We will"
    str_2 := " Rock"
    str_3 := " You!!"

    str_final := fmt.Sprintf("%s%s%s", str_1, str_2, str_3)

    fmt.Println(str_final)
} 

輸出:

We will Rock You!!

bytes.Buffer 方法

在不生成不必要的字串物件的情況下,連線字串的一種有效方法是 bytes.Buffer 方法。我們可以使用 WriteString() 方法將字串寫入位元組緩衝區,然後將其轉換為字串。

package main

import (
    "bytes"
    "fmt"
)

func main() {
    var byte_buf bytes.Buffer

    byte_buf.WriteString("Hello ")
    byte_buf.WriteString("World!!")

    fmt.Println(byte_buf.String())
}

輸出:

Hello World!!

strings.Builder 方法

與其他方法相比,此方法可通過使用非常少的記憶體來有效地串聯字串。

package main

import (
    "fmt"
    "strings"
)

func main() {
    var str_build strings.Builder
    str_build.WriteString("Hello ")
    str_build.WriteString("World!!")
    fmt.Println(str_build.String())
}

輸出:

Hello World!!

+= 運算子串聯字串

它類似於使用加號 + 運算子的字串連線,但比前一個短。+= 運算子將新字串附加到指定字串的右側。

package main

import "fmt"

func main() {
    str_1 := "Hello "

    str_1 += "World!!"
    fmt.Println("Final String:", str_1)

}

輸出:

Final String: Hello World!!

不同方法的比較

bytes.Bufferstrings.Builder 方法比其他字串連線方法要快得多。因此,當我們必須執行大量的字串連線時,我們更喜歡 bytes.Bufferstrings.Builder 方法。但是,當連線數較少時,可以使用 ++= 運算子。

作者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

相關文章 - Go String