strconv, math และ sort
การแปลงชนิดข้อมูล เครื่องมือคำนวณ และการเรียงลำดับ
strconv, math และ sort เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน 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 ขึ้นไป) สำหรับทางเลือกแบบเจเนอริก
คำถามที่พบบ่อย
บทเรียน “strconv, math และ sort” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “strconv, math และ sort” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “strconv, math และ sort”
การแปลงชนิดข้อมูล เครื่องมือคำนวณ และการเรียงลำดับ คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “strconv, math และ sort” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม
ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- แพ็กเกจ fmt และ strings
- strconv, math และ sort
- พื้นฐานแพ็กเกจ time
- แพ็กเกจ os และ filepath