本文へスキップ
BecomeCoder

Goコース · 第7章 パッケージと標準ライブラリ · レッスン27

strings と strconv ― 文字列操作と型変換

ブラウザで完結

導入

ユーザー入力やファイルから読み込んだデータは、たいてい文字列です。それを整形したり、数値に変換して計算したりする作業は、Go プログラムのほぼすべてに登場します。この2つのパッケージが、その基本装備です。

説明

strings パッケージは、文字列の検索・分割・結合・整形を担当します。

package main

import (
	"fmt"
	"strings"
)

func main() {
	line := "  Go,Python,Rust  "
	trimmed := strings.TrimSpace(line)
	langs := strings.Split(trimmed, ",")

	fmt.Println(langs)
	fmt.Println(strings.Join(langs, " / "))
	fmt.Println(strings.ToUpper(langs[0]))
	fmt.Println(strings.Contains(trimmed, "Python"))
}
  • strings.TrimSpace(...) … 前後の空白(スペース・タブ・改行)を取り除く。外部から来た文字列の下処理にほぼ必須。
  • strings.Split(s, 区切り) … 区切り文字でスライスに分割する。
  • strings.Join(スライス, 区切り)Split の逆で、スライスを1本の文字列に結合する。
  • strings.ToUpper / strings.Contains … 大文字化や部分一致の判定。

よく使う関数をもう少し挙げます。

関数役割
strings.HasPrefix(s, "go")s"go" で始まるか
strings.ReplaceAll(s, "旧", "新")すべて置換
strings.Count(s, "a")"a" の出現回数
strings.Fields(s)連続する空白で分割(CSVでない自由記述向き)

strconv パッケージは、文字列と数値の変換を担当します。

n, err := strconv.Atoi("123")   // 文字列 → int
s := strconv.Itoa(456)          // int → 文字列
f, err2 := strconv.ParseFloat("3.14", 64) // 文字列 → float64

Atoi(ASCII to integer)は変換に失敗すると errnil ではなくなります。ユーザー入力を数値として扱うときは、error を必ず確認する習慣をつけましょう。

n2, err3 := strconv.Atoi("abc")
fmt.Println(n2, err3) // 0 strconv.Atoi: parsing "abc": invalid syntax

やってみよう

strings.Split で分けたスライスの各要素に対して strconv.Atoi を呼び、数値に変換してから合計する――という「文字列 → 分割 → 変換 → 集計」の流れは、CSVのような簡易データを読むときの定番パターンです。

演習

カンマ区切りの文字列 csv := "120,340,75"strings.Split で分割し、strconv.Atoi で1つずつ数値に変換して合計を求め、"合計: 数値" の形で出力してください(変換に失敗した要素は無視してよい)。

ヒント1を見る

strings.Split(csv, ",")[]string が得られます。for _, p := range parts { ... } で1つずつ処理しましょう。

ヒント2を見る

n, err := strconv.Atoi(p) で変換し、err != nil ならその要素は continue で飛ばし、そうでなければ total += n を積み上げます。最後に fmt.Println("合計:", total)

実際に動かしてみよう

下のエディタにGoを書いて「実行」を押すと、学習用シミュレータが fmt の出力を表示します(本物のGoコンパイラではなく、教材の範囲を再現した軽量エンジンです)。スライス・マップ・構造体・インターフェース・goroutine/channel なども動きます。本文の例を書き換えて動かしてみましょう(並行処理の実行順は決定的に再現しているため、本物のインターリーブとは異なる場合があります)。

Go — ブラウザ内で実行(学習用シミュレータ)

Goの教材サブセットを動かす学習用シミュレータを読み込みます(本物のGoコンパイラではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。