Scanner
Baca baris demi baris
Scanner adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.
Apa itu bufio.Scanner
bufio.Scanner adalah cara termudah untuk membaca masukan unit demi unit, biasanya baris demi baris.
Fungsi ini menyembunyikan penyanggaan dan penanganan pembatas, serta menghapus baris baru di akhir untuk Anda.
Memindai Baris
Buat pemindai, lalu lakukan pengulangan dengan Scan(), yang mengembalikan false saat mencapai akhir. Baca unit saat ini dengan Text().
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := bufio.NewScanner(strings.NewReader("one\ntwo\nthree"))
for s.Scan() {
fmt.Println("line:", s.Text())
}
}Memindai Kata
Tetapkan fungsi pemisah dengan Split(bufio.ScanWords) untuk membagi masukan berdasarkan spasi kosong, bukan baris.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := bufio.NewScanner(strings.NewReader("the quick brown fox"))
s.Split(bufio.ScanWords)
for s.Scan() {
fmt.Println(s.Text())
}
}Menghitung Unit
Pemindai membuat penghitungan menjadi mudah. Di sini, kita menghitung kata.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := bufio.NewScanner(strings.NewReader("a b c d e"))
s.Split(bufio.ScanWords)
count := 0
for s.Scan() {
count++
}
fmt.Println("words:", count)
}Bytes dibandingkan Text
Text() mengembalikan salinan string. Bytes() mengembalikan potongan yang mendasarinya, yang digunakan ulang pada Scan() berikutnya — salinlah jika Anda perlu menyimpannya.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := bufio.NewScanner(strings.NewReader("data"))
s.Scan()
fmt.Println(len(s.Bytes()), "bytes")
}Memindai Karakter
bufio.ScanRunes membagi masukan menjadi karakter UTF-8, satu unit untuk setiap karakter.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := bufio.NewScanner(strings.NewReader("Gö"))
s.Split(bufio.ScanRunes)
for s.Scan() {
fmt.Printf("[%s]", s.Text())
}
fmt.Println()
}Memeriksa Kesalahan
Scan() yang mengembalikan false dapat berarti EOF atau kesalahan. Setelah pengulangan, panggil s.Err() untuk membedakan keduanya.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := bufio.NewScanner(strings.NewReader("ok\nfine"))
for s.Scan() {
fmt.Println(s.Text())
}
if err := s.Err(); err != nil {
fmt.Println("error:", err)
}
}Batas Ukuran Unit
Secara bawaan, satu unit tidak boleh melebihi bufio.MaxScanTokenSize (64KB). Baris yang lebih panjang menyebabkan Scan() berhenti dengan kesalahan.
Memperbesar Penyangga
Gunakan Buffer(buf, max) untuk mengizinkan unit yang lebih besar. Berikan penyangga awal dan ukuran maksimum.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := bufio.NewScanner(strings.NewReader("long line here"))
buf := make([]byte, 0, 1024)
s.Buffer(buf, 1024*1024)
for s.Scan() {
fmt.Println(s.Text())
}
}Fungsi Pemisah Khusus
Fungsi pemisah memiliki deklarasi func(data []byte, atEOF bool) (advance int, token []byte, err error). Anda dapat membagi berdasarkan koma, lebar tetap, atau apa pun.
Scanner dibandingkan Pembaca
Scanner: sederhana, menghasilkan unit baris/kata, menghapus baris baru secara otomatis, batas bawaan 64KBReader: kendali penuh, tanpa batas ukuran, penanganan pembatas secara manual
Gunakan Scanner terlebih dahulu; beralihlah ke Reader saat membutuhkan kemampuan lebih.
Pemeriksaan Singkat
Ujilah pengetahuan Anda tentang pemindai.
Ringkasan
Anda telah mempelajari cara membaca masukan unit demi unit dengan bufio.Scanner.
- Pengulangan
Scan()+Text()/Bytes() Splitdengan ScanLines/ScanWords/ScanRunes- Periksa
Err()setelah pengulangan - Gunakan
Bufferuntuk unit yang lebih besar dari 64KB
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Scanner” gratis?
Ya — teks lengkap “Scanner” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Scanner”?
Baca baris demi baris Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Go Academy?
Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Scanner” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.