Go/string
表示
< Go
Goのstringについて
[編集]Goにおける string は、UTF-8エンコーディングされた不変(immutable)なバイト列です。文字列操作は多くの場面で使われ、可読性や安全性の高いデータ型です。string は文字(rune)列ではなく、バイト列のスライスのように扱われる点に注意が必要です。
基本情報
[編集]- Goの
stringはUTF-8でエンコードされたバイト列 - イミュータブル(変更不可):一度作成した文字列は書き換え不可
- 内部表現:長さ+バイト配列(sliceのような構造)
- 空文字列は
"" - Unicode(rune)と文字列の関係に注意(1文字 ≠ 1バイト)
他のキーワードとの組み合わせ
[編集]変数宣言との組み合わせ
[編集]var name string = "Gopher" greeting := "Hello, 世界" empty := "" // 空文字列
定数定義との組み合わせ
[編集]const Hello string = "Hello" const World = "World" // 型推論 const Multiline = `複数行の 文字列リテラル`
関数パラメータと戻り値
[編集]func Greet(name string) string { return "Hello, " + name + "!" } func IsEmpty(s string) bool { return s == "" }
型変換
[編集]bytes := []byte("Hello") s := string(bytes) // []byte → string runes := []rune("世界") s2 := string(runes) // []rune → string b := []byte("Go言語") b[0] = 'J' // これはstringにはできない(stringは不変) s3 := string(65) // → "A"(1 rune)
配列とスライス
[編集]words := []string{"apple", "banana", "cherry"} lines := strings.Split("a,b,c", ",") // ["a", "b", "c"] joined := strings.Join([]string{"a", "b", "c"}, "-") // "a-b-c"
マップ
[編集]dict := map[string]string{ "en": "hello", "ja": "こんにちは", } count := map[string]int{ "a": 3, "b": 2, }
構造体のフィールド
[編集]type User struct { Name string Email string Password string } type Log struct { Level string Message string }
バイト処理・UTF-8処理との組み合わせ
[編集]import "unicode/utf8" func CharCount(s string) int { return utf8.RuneCountInString(s) } func FirstRune(s string) rune { r, _ := utf8.DecodeRuneInString(s) return r } func BytesToString(b []byte) string { return string(b) }
エスケープ・リテラル
[編集]s1 := "Line1\nLine2" // エスケープあり s2 := `Line1 Line2` // 生(raw)文字列リテラル s3 := "彼は\"Go\"を使う" // ダブルクォートのエスケープ
一般的なユースケース
[編集]- 文字列の切り出し(バイト単位に注意)
s := "こんにちは" b := s[0:3] // バイト単位 → 無効なUTF-8になる可能性あり r := []rune(s) sub := string(r[0:2]) // 文字単位の切り出し
- 文字列の検索や置換
import "strings" func NormalizeSpace(s string) string { return strings.TrimSpace(strings.ReplaceAll(s, "\t", " ")) } func HasPrefixHttp(url string) bool { return strings.HasPrefix(url, "http") }
- JSONとの連携(シリアライズ)
import "encoding/json" type Message struct { Text string `json:"text"` } msg := Message{"こんにちは"} data, _ := json.Marshal(msg)
string 型は、Goにおいて最も頻繁に使われる基本型の1つです。UTF-8バイト列として実装されているため、Unicodeの扱いには注意が必要です。rune 型や []byte との相互変換を正しく理解し、イミュータブルな性質を意識して使用することで、安全で高効率な文字列処理が可能になります。