0Pricing
Go Academy · レッスン

fmtパッケージとstringsパッケージ

出力のフォーマットと文字列の操作

「fmtパッケージとstringsパッケージ」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。

fmtパッケージの概要

fmtパッケージは、書式付きI/Oを実装します。主な関数:

  • fmt.Print、fmt.Println、fmt.Printf — 標準出力に書き込みます
  • fmt.Sprint、fmt.Sprintf、fmt.Sprintln — 文字列を返します
  • fmt.Fprint、fmt.Fprintf — 任意のio.Writerに書き込みます
  • fmt.Scan、fmt.Scanf — 標準入力から読み取ります

fmtの書式指定子

fmt.Printfでよく使う書式指定子:

package main
import "fmt"

func main() {
    name := "Gopher"
    age := 15
    score := 98.6

    fmt.Printf("%s is %d years old\n", name, age)
    fmt.Printf("Score: %.1f%%\n", score)
    fmt.Printf("Type: %T, Value: %v\n", age, age)
    fmt.Printf("Hex: %x, Binary: %b\n", 255, 255)
    fmt.Printf("Padded: %10s|%-10s\n", name, name)
}

文字列の構築に使うfmt.Sprintf

fmt.Sprintfは出力せずに書式付き文字列を返します。文字列の構築に便利です:

package main
import "fmt"

func formatUser(name string, age int) string {
    return fmt.Sprintf("User{name: %q, age: %d}", name, age)
}

func main() {
    fmt.Println(formatUser("Alice", 30))
    // User{name: "Alice", age: 30}

    // %q adds quotes; %+v prints struct field names
    type Point struct{X, Y int}
    p := Point{1, 2}
    fmt.Printf("%+v\n", p) // {X:1 Y:2}
}

エラーの書式設定に使うfmt.Errorf

fmt.Errorfは、書式を設定したエラー値を作成します:

package main
import "fmt"

func getUser(id int) error {
    return fmt.Errorf("getUser(%d): user not found", id)
}

func main() {
    err := getUser(42)
    fmt.Println(err) // getUser(42): user not found

    // Wrap errors with %w for unwrapping:
    base := fmt.Errorf("base error")
    wrapped := fmt.Errorf("context: %w", base)
    fmt.Println(wrapped)
}

stringsパッケージ:よく使う関数

stringsパッケージは、文字列を操作する関数を提供します:

package main
import ("fmt"; "strings")

func main() {
    s := "  Hello, Go World!  "

    fmt.Println(strings.TrimSpace(s))           // "Hello, Go World!"
    fmt.Println(strings.ToUpper(s))             // "  HELLO, GO WORLD!  "
    fmt.Println(strings.ToLower(s))             // "  hello, go world!  "
    fmt.Println(strings.Contains(s, "Go"))      // true
    fmt.Println(strings.HasPrefix(s, "  Hel")) // true
    fmt.Println(strings.Count(s, "l"))          // 3
}

strings.Split と strings.Join

strings.Splitは文字列を分割し、strings.Joinはスライスを結合します:

package main
import ("fmt"; "strings")

func main() {
    csv := "alice,bob,carol,dave"
    names := strings.Split(csv, ",")     // ["alice" "bob" "carol" "dave"]
    fmt.Println(names)

    upper := make([]string, len(names))
    for i, n := range names {
        upper[i] = strings.ToUpper(n)
    }
    result := strings.Join(upper, " | ")
    fmt.Println(result) // ALICE | BOB | CAROL | DAVE
}

strings.Replace と strings.ReplaceAll

部分文字列の出現箇所を置換します:

package main
import ("fmt"; "strings")

func main() {
    s := "foo bar foo baz foo"

    // Replace first 2 occurrences
    fmt.Println(strings.Replace(s, "foo", "XXX", 2))
    // XXX bar XXX baz foo

    // Replace all
    fmt.Println(strings.ReplaceAll(s, "foo", "GO"))
    // GO bar GO baz GO
}

効率的な連結のためのstrings.Builder

strings.Builderを使用すると、効率的に文字列を構築できます。連結のたびに新しい文字列を割り当てる必要がありません:

package main
import ("fmt"; "strings")

func join(parts []string, sep string) string {
    var sb strings.Builder
    for i, p := range parts {
        if i > 0 { sb.WriteString(sep) }
        sb.WriteString(p)
    }
    return sb.String()
}

func main() {
    fmt.Println(join([]string{"a", "b", "c"}, "-")) // a-b-c
}

strings.NewReader と strings.Reader

strings.NewReaderは文字列からio.Readerを作成します。readerを受け取る関数のテストに便利です:

package main
import ("fmt"; "io"; "strings")

func readAll(r io.Reader) string {
    data, _ := io.ReadAll(r)
    return string(data)
}

func main() {
    r := strings.NewReader("Hello from a string reader")
    fmt.Println(readAll(r))

    // Also: strings.NewReplacer for multiple replacements
    rep := strings.NewReplacer("<", "&lt;", ">", "&gt;")
    fmt.Println(rep.Replace("<b>bold</b>"))
}

strings.Fields と strings.Map

その他の便利なstrings関数:

package main
import ("fmt"; "strings")

func main() {
    // Fields splits on any whitespace (like awk)
    words := strings.Fields("  one  two   three  ")
    fmt.Println(words) // [one two three]

    // Map applies a function to each rune
    rot13 := func(r rune) rune {
        if r >= 'a' && r <= 'z' { return 'a' + (r-'a'+13)%26 }
        if r >= 'A' && r <= 'Z' { return 'A' + (r-'A'+13)%26 }
        return r
    }
    fmt.Println(strings.Map(rot13, "Hello, World!"))
}

クイックチェック

Goで多数の文字列を効率的に連結するには、どの関数を使用すべきですか?

まとめ:fmtとstrings

まとめ:

  • 書式指定子(%s %d %f %v %T %q)を使った書式付きの出力や文字列にはfmt.Printf/Sprintfを使用します
  • 書式付きエラーにはfmt.Errorfを使用し、%wでラップします
  • strings.Split/Join、Contains、Replace、TrimSpace、ToUpper/Lowerを使用します
  • 効率的な連結にはstrings.Builderを使用します
  • 文字列をio.Readerとして使用するにはstrings.NewReaderを使用します

よくある質問

「fmtパッケージとstringsパッケージ」レッスンは無料ですか?

はい。「fmtパッケージとstringsパッケージ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。

「fmtパッケージとstringsパッケージ」で何を学びますか?

出力のフォーマットと文字列の操作 ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Go Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「fmtパッケージとstringsパッケージ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このGo Academyレッスンでコードを書いて実行できますか?

はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. fmtパッケージとstringsパッケージ
  2. strconv、math、sort
  3. timeパッケージの基本
  4. osパッケージとfilepathパッケージ
← Go Academyに戻る