Go で文字列を効率的に連結する方法

Suraj Joshi 2023年1月30日
  1. プラス(+)演算子
  2. Print() 関数に複数の引数がある
  3. Go の Join() 関数を使用
  4. Go の Sprintf() メソッド
  5. Go の bytes.Buffer メソッド
  6. Go の strings.Builder メソッド
  7. += 演算子を追加
  8. 異なる方法の比較
Go で文字列を効率的に連結する方法

2つ以上の文字列を 1つの新しい文字列にマージする行為は文字列連結と呼ばれます。文字列連結は、プログラミングで最も広く実行されている操作の 1つです。この記事では、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!!

複数の文字列を引数として GoPrint() 関数に渡すことができます。文字列は、文字列の間に空白を追加することで自動的に連結されます。

package main

import "fmt"

func main() {

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

出力:

String Concatenation!!

Go の Join() 関数を使用

また、文字列のスライスと区切り文字を使用してそれらを結合し、単一の文字列を生成する文字列パッケージにある 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!!

Go の Sprintf() メソッド

fmt パッケージで Sprintf() メソッドを使用することも、文字列連結の最も簡単な方法の 1つです。

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!!

Go の bytes.Buffer メソッド

不要な string オブジェクトを生成せずに文字列を連結する効率的な方法は 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!!

Go の 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.Buffer および strings.Builder メソッドは、文字列連結の他のメソッドよりもかなり高速です。したがって、大量の文字列連結を実行する必要がある場合は、bytes.Buffer メソッドと strings.Builder メソッドを使用します。ただし、連結の数が少ない場合は、+ または+= 演算子を使用できます。

著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

関連記事 - Go String