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("<", "<", ">", ">")
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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- fmtパッケージとstringsパッケージ
- strconv、math、sort
- timeパッケージの基本
- osパッケージとfilepathパッケージ