この記事では、GoLangで文字列を連結するさまざまな方法を解説します。
①プラス(+)演算子による文字列の連結
プラス(+)演算子は、文字列の連結に使用することができます。
文字列を連結する最も簡単な方法として、よく使われています。
name := "Tanaka" + " " + "Koji" // Tanaka Koji
fmtパッケージのprint関数は、引数として複数の文字列が与えられると、自動的に連結を行います。その際、文字列と文字列の間にスペースを追加します。
fmt.Println("Hello", "World!") // prints "Hello World!"
②文字列appendを用いた文字列の連結
文字列は、+=演算子で互いに追加することができます。
これは一つ目と同じですが、少し短い書き方で連結することができます。操作された文字列の右側を追加することになります。
以下は、プラスイコール演算子を使って文字列を追加するコード例です。
u := "This"
v := " is working."
u += v // sets u to "This is working."
③文字列を連結するstringsパッケージのjoin()関数
文字列の連結には、stringsパッケージのjoin関数が使用できます。
この関数は、以下のようなメソッド構造を持っています。
func Join(a []string, sep string) string
文字列のスライスと、それらを結合するセパレータの2つの引数を取ります。そこから1つの文字列を生成するということです。
以下は、join関数の動作を示すコード例です。
package main
import (
"fmt"
"strings"
)
func main() {
sampleSlice := []string{"My", "name", "is", "Tanaka"}
result := strings.Join(sampleSlice, " ")
fmt.Println(result) // My name is Tanaka
}
④Golangで文字列を連結する Sprintf()メソッド
文字列の連結には、fmtパッケージのSprintf()メソッドを使用することができます。
以下では、Sprintf()メソッドを使用する連結された文字列を取り出す方法を紹介します。
package main
import (
"fmt"
)
func main() {
s1 := "AAA"
s2 := "BBB"
result := fmt.Sprintf("%s%s", s1, s2)
fmt.Println(result) // AAABBB
}
このように、文字列の書式設定(%s)によって、文字列の連結を行うことができます。
⑤bytes bufferメソッド
bytesパッケージには、バッファの一種であるバイトバッファが含まれており、WriteStringメソッドで文字列を書き、それを文字列に変換することができます。
このやり方は、文字列の連結を効率的に行うことができます。
以下は、バイトバッファによる文字列連結のコード例です。
package main
import (
"bytes"
"fmt"
)
func main() {
var sample bytes.Buffer
sample.WriteString("AAA")
sample.WriteString("BBB") // append
fmt.Println(sample.String()) // AAABBB
}
⑥文字列を連結するstringsパッケージのBuilderメソッド
文字列パッケージにはビルダー型があり、これは文字列を構築するのに非常に効率的な方法です。
このやり方だと、文字列を連結する際に使用するメモリが大幅に削減され、より優れた連結方法となります。
またWriteString関数を使えば、より高速な方法で文字列を連結することができます。
以下は、strings Builderメソッドを使った文字列連結のコード例です。
package main
import (
"fmt"
"strings"
)
func main() {
var sb strings.Builder
sb.WriteString("AAA")
sb.WriteString("BBB")
fmt.Println(sb.String()) // AAABBB
}
⑦同じ文字列を複数回連結するRepeat()メソッド
stringsパッケージの repeatメソッドを使うと、同じ文字列を複数回結合して別の文字列を形成することができます。
以下は、repeatメソッドを使用したコード例です。
package main
import (
"fmt"
"strings"
)
func main() {
fmt.Println(strings.Repeat("XYZ", 3)) // XYZXYZXYZ
}