strconv、math、sort
型変換、数学ユーティリティ、ソート
「strconv、math、sort」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。
strconv:文字列変換
strconvパッケージは、文字列と基本型の間で変換を行います:
package main
import ("fmt"; "strconv")
func main() {
// String to int
n, err := strconv.Atoi("42")
fmt.Println(n, err) // 42 <nil>
// Int to string
s := strconv.Itoa(123)
fmt.Println(s) // "123"
// String to float64
f, _ := strconv.ParseFloat("3.14", 64)
fmt.Println(f) // 3.14
// Float64 to string
fs := strconv.FormatFloat(f, 'f', 2, 64)
fmt.Println(fs) // "3.14"
}strconv.ParseInt と ParseBool
基数を指定して整数を、また真偽値を解析します:
package main
import ("fmt"; "strconv")
func main() {
// Parse int with base
n, _ := strconv.ParseInt("FF", 16, 64) // hex
fmt.Println(n) // 255
n2, _ := strconv.ParseInt("11111111", 2, 64) // binary
fmt.Println(n2) // 255
// Bool parsing
b1, _ := strconv.ParseBool("true")
b2, _ := strconv.ParseBool("1")
b3, _ := strconv.ParseBool("T")
fmt.Println(b1, b2, b3) // true true true
}strconvのエラー処理
strconvのエラーは必ず処理してください。無効な入力の場合、*strconv.NumErrorでラップされたエラーが返されます:
package main
import ("fmt"; "strconv")
func safeAtoi(s string) (int, error) {
n, err := strconv.Atoi(s)
if err != nil {
return 0, fmt.Errorf("invalid integer %q: %w", s, err)
}
return n, nil
}
func main() {
n, err := safeAtoi("abc")
fmt.Println(n, err)
// 0 invalid integer "abc": strconv.Atoi: ...
}mathパッケージの基本
mathパッケージは、数学定数と関数を提供します:
package main
import ("fmt"; "math")
func main() {
fmt.Println(math.Pi) // 3.141592653589793
fmt.Println(math.E) // 2.718281828459045
fmt.Println(math.Sqrt(16)) // 4
fmt.Println(math.Pow(2, 10)) // 1024
fmt.Println(math.Abs(-5.5)) // 5.5
fmt.Println(math.Floor(3.7)) // 3
fmt.Println(math.Ceil(3.2)) // 4
fmt.Println(math.Round(3.5)) // 4
fmt.Println(math.Log(math.E)) // 1
fmt.Println(math.Log2(8)) // 3
}math.MaxInt と浮動小数点数の上限
整数と浮動小数点数の上限には、mathの定数を使用します:
package main
import ("fmt"; "math")
func main() {
fmt.Println(math.MaxInt) // max int (platform-dependent)
fmt.Println(math.MinInt) // min int
fmt.Println(math.MaxInt32) // 2147483647
fmt.Println(math.MaxFloat64) // 1.7976931348623157e+308
fmt.Println(math.SmallestNonzeroFloat64)
fmt.Println(math.IsInf(math.Inf(1), 1)) // true
fmt.Println(math.IsNaN(math.NaN())) // true
}math/rand — 乱数
math/randで乱数を生成します(Go 1.20以降では自動的にシードが設定されます):
package main
import ("fmt"; "math/rand")
func main() {
// Go 1.20+: automatically seeded
fmt.Println(rand.Intn(100)) // random 0-99
fmt.Println(rand.Float64()) // random [0.0, 1.0)
// Shuffle a slice
s := []int{1, 2, 3, 4, 5}
rand.Shuffle(len(s), func(i, j int) {
s[i], s[j] = s[j], s[i]
})
fmt.Println(s)
}sort.Slice — 簡単なカスタムソート
sort.Sliceとカスタム比較関数を使用すると、任意のスライスをソートできます:
package main
import ("fmt"; "sort")
func main() {
people := []struct{ Name string; Age int }{
{"Alice", 30}, {"Bob", 25}, {"Carol", 35},
}
// Sort by age ascending
sort.Slice(people, func(i, j int) bool {
return people[i].Age < people[j].Age
})
fmt.Println(people)
// [{Bob 25} {Alice 30} {Carol 35}]
}sort.Strings、sort.Ints、sort.Float64s
一般的なスライス型用の組み込みソート関数:
package main
import ("fmt"; "sort")
func main() {
strs := []string{"banana", "apple", "cherry"}
sort.Strings(strs)
fmt.Println(strs) // [apple banana cherry]
nums := []int{5, 2, 8, 1, 9, 3}
sort.Ints(nums)
fmt.Println(nums) // [1 2 3 5 8 9]
// Check if already sorted:
fmt.Println(sort.IntsAreSorted(nums)) // true
}sort.Search — 二分探索
sort.Searchは、ソート済みのスライスに対して二分探索を実行します:
package main
import ("fmt"; "sort")
func main() {
nums := []int{1, 3, 5, 7, 9, 11, 13}
target := 7
i := sort.Search(len(nums), func(i int) bool {
return nums[i] >= target
})
if i < len(nums) && nums[i] == target {
fmt.Printf("Found %d at index %d\n", target, i) // Found 7 at index 3
}
}slicesパッケージ(Go 1.21以降)
Go 1.21では、ジェネリックなソート関数と検索関数を備えたslicesパッケージが追加されました:
package main
import ("fmt"; "slices")
func main() {
nums := []int{5, 2, 8, 1}
slices.Sort(nums) // in-place sort
fmt.Println(nums) // [1 2 5 8]
strs := []string{"c", "a", "b"}
slices.Sort(strs)
fmt.Println(strs) // [a b c]
idx, found := slices.BinarySearch(nums, 5)
fmt.Println(idx, found) // 2 true
}クイックチェック
Goで整数を文字列表現に変換する関数はどれですか?
復習: strconv、math、sort
まとめ:
- 変換には
strconv.Atoi/Itoa、ParseFloat/FormatFloat、ParseBoolを使用します - 数学的な計算には
math.Sqrt/Pow/Abs/Floor/Ceil/Roundを使用します - 型の上限値には
math.MaxInt/MaxFloat64を使用します - カスタムソートには
sort.Slice、基本型のソートにはsort.Strings/Intsを使用します - 二分探索には
sort.Searchを使用します - ジェネリックな代替手段には
slicesパッケージ(Go 1.21以降)を使用します
AI チューターと学ぶ Go — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 51
- レッスン
- 203
よくある質問
「strconv、math、sort」レッスンは無料ですか?
はい。「strconv、math、sort」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。
「strconv、math、sort」で何を学びますか?
型変換、数学ユーティリティ、ソート ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Go Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「strconv、math、sort」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このGo Academyレッスンでコードを書いて実行できますか?
はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- fmtパッケージとstringsパッケージ
- strconv、math、sort
- timeパッケージの基本
- osパッケージとfilepathパッケージ