Go言語でのStringとSliceの扱い方:golang string slice

By quonta 4月 16, 2024

Go言語でのStringとSliceの基本

Go言語では、stringsliceは非常に重要なデータ型です。それぞれの基本的な特性と使い方を理解することは、効率的なGoプログラムを書くために必要不可欠です。

String

Go言語のstringは、文字列を表現するためのデータ型です。stringはイミュータブル(変更不可能)であり、一度作成されるとその値を変更することはできません。

s := "Hello, World!"
fmt.Println(s)  // 出力: Hello, World!

Slice

一方、sliceは配列の一部を表現するデータ型です。sliceはミュータブル(変更可能)であり、その要素を自由に変更することができます。

arr := []int{1, 2, 3, 4, 5}
s := arr[1:4]
fmt.Println(s)  // 出力: [2 3 4]

これらの基本的な特性を理解することで、Go言語でのstringsliceの扱い方がより明確になるでしょう。次のセクションでは、これらのデータ型をどのように変換するかについて詳しく説明します。

StringをSliceに変換する方法

Go言語では、stringsliceに変換する方法は非常に簡単です。具体的には、[]byte[]runeを使用してstringsliceに変換します。

[]byteを使用する方法

string[]byteに変換すると、各文字がASCIIコード(またはUTF-8エンコード)のバイト値に変換されます。

s := "Hello, World!"
b := []byte(s)
fmt.Println(b)  // 出力: [72 101 108 108 111 44 32 87 111 114 108 100 33]

[]runeを使用する方法

一方、string[]runeに変換すると、各文字がUnicodeコードポイントに変換されます。これは、マルチバイト文字(例えば、日本語やアラビア語など)を扱う際に特に有用です。

s := "こんにちは世界!"
r := []rune(s)
fmt.Println(r)  // 出力: [12371 12435 12395 12385 12399 19990 30028 65281]

これらの方法を使って、Go言語でstringsliceに変換することができます。次のセクションでは、逆の変換、つまりsliceからstringへの変換について説明します。

SliceからStringへの変換

Go言語では、sliceからstringへの変換も非常に簡単です。具体的には、string()関数を使用してslicestringに変換します。

[]byteからStringへの変換

[]byteからstringへの変換は、バイト値を元の文字に戻すプロセスです。

b := []byte{72, 101, 108, 108, 111, 44, 32, 87, 111, 114, 108, 100, 33}
s := string(b)
fmt.Println(s)  // 出力: Hello, World!

[]runeからStringへの変換

同様に、[]runeからstringへの変換は、Unicodeコードポイントを元の文字に戻すプロセスです。

r := []rune{12371, 12435, 12395, 12385, 12399, 19990, 30028, 65281}
s := string(r)
fmt.Println(s)  // 出力: こんにちは世界!

これらの方法を使って、Go言語でsliceからstringへの変換を行うことができます。次のセクションでは、stringsliceの違いについて詳しく説明します。

StringとSliceの違い

Go言語のstringsliceは、それぞれ異なる特性と用途を持つデータ型です。以下に、その主な違いを列挙します。

イミュータブル性 vs ミュータブル性

  • stringイミュータブル(変更不可能)です。一度stringが作成されると、その値は変更できません。新しい値を代入することでstringを”変更”すると、実際には新しいstringが作成され、古いstringはガベージコレクションの対象となります。

  • 一方、sliceミュータブル(変更可能)です。sliceの要素は自由に変更でき、その変更はsliceが参照する元の配列にも反映されます。

文字列 vs 配列の一部

  • stringは文字列を表現するためのデータ型です。stringは文字の連続したシーケンスを表し、各文字はUTF-8エンコードされたバイトとして格納されます。

  • sliceは配列の一部を表現するためのデータ型です。sliceは配列の任意の部分を参照し、その部分を変更することができます。

これらの違いを理解することで、Go言語でstringsliceを適切に使い分けることができます。次のセクションでは、これらの知識を活用した実用的な例と応用について説明します。

実用的な例と応用

Go言語のstringsliceの知識を活用すると、さまざまな実用的な問題を解決することができます。以下に、その一例を示します。

文字列の反転

string[]runeに変換することで、文字列を反転することができます。これは、sliceがミュータブルであるためです。

s := "こんにちは世界!"
r := []rune(s)
for i, j := 0, len(r)-1; i < j; i, j = i+1, j-1 {
    r[i], r[j] = r[j], r[i]
}
s = string(r)
fmt.Println(s)  // 出力: !界世はちにんこ

文字列の分割

stringsパッケージのSplit関数を使用すると、stringを特定の区切り文字で分割して[]stringを作成することができます。

s := "apple,banana,cherry"
ss := strings.Split(s, ",")
fmt.Println(ss)  // 出力: [apple banana cherry]

これらの例は、Go言語のstringsliceの基本的な使い方を示しています。これらの知識を活用すれば、より複雑な問題に対応することも可能です。具体的な応用例については、次のセクションで詳しく説明します。

By quonta

Related Post

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です