0Pricing
Go Academy · Pelajaran

Interface Reader

Inti I/O Go

Interface Reader adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.

Inti I/O Go

io.Reader adalah satu antarmuka yang menyatukan semua masukan di Go: berkas, koneksi jaringan, teks, aliran terkompresi, dan lainnya.

Kode yang menerima io.Reader dapat bekerja dengan sumber apa pun.

Definisi Antarmuka

Kontraknya sangat singkat:

  • Read(p []byte) (n int, err error)

Fungsi tersebut mengisi p dengan paling banyak len(p) bita, lalu mengembalikan jumlahnya, yaitu n, serta sebuah kesalahan.

Membaca dari String

strings.NewReader mengubah string menjadi io.Reader.

package main

import (
	"fmt"
	"strings"
)

func main() {
	r := strings.NewReader("Hello")
	buf := make([]byte, 5)
	n, _ := r.Read(buf)
	fmt.Printf("read %d bytes: %s\n", n, buf[:n])
}

Aturan n lalu Kesalahan

Sebuah Read dapat mengembalikan bita n > 0 dan sebuah kesalahan dalam pemanggilan yang sama. Selalu proses bita sebanyak n terlebih dahulu, lalu periksa kesalahannya.

Membaca dalam Pengulangan

Sebagian besar pembaca memerlukan pengulangan karena satu Read dapat mengembalikan lebih sedikit bita daripada yang diminta.

package main

import (
	"fmt"
	"io"
	"strings"
)

func main() {
	r := strings.NewReader("abcdef")
	buf := make([]byte, 2)
	for {
		n, err := r.Read(buf)
		if n > 0 {
			fmt.Printf("%s ", buf[:n])
		}
		if err == io.EOF {
			break
		}
	}
	fmt.Println()
}

io.ReadAll

Saat datanya kecil dan terbatas, io.ReadAll membaca semuanya ke dalam potongan bita untuk Anda.

package main

import (
	"fmt"
	"io"
	"strings"
)

func main() {
	r := strings.NewReader("read it all")
	data, _ := io.ReadAll(r)
	fmt.Println(string(data))
}

Pembaca dari Bytes

bytes.NewReader membungkus potongan bita, berguna saat Anda sudah memiliki data di memori.

package main

import (
	"bytes"
	"fmt"
	"io"
)

func main() {
	r := bytes.NewReader([]byte{72, 105})
	data, _ := io.ReadAll(r)
	fmt.Println(string(data))
}

Fungsi yang Menerima Pembaca

Tulislah fungsi yang menerima io.Reader, bukan tipe konkret. Fungsi yang sama kemudian dapat membaca dari berkas, soket, atau teks uji.

package main

import (
	"fmt"
	"io"
	"strings"
)

func countBytes(r io.Reader) int {
	data, _ := io.ReadAll(r)
	return len(data)
}

func main() {
	fmt.Println(countBytes(strings.NewReader("hello")))
}

io.EOF Bukan Kesalahan

Perlakukan io.EOF sebagai sinyal normal bahwa aliran telah berakhir, bukan sebagai kegagalan. Hanya kesalahan lain yang menunjukkan masalah nyata.

LimitReader

io.LimitReader(r, n) membungkus pembaca agar berhenti setelah n bita — berguna untuk membatasi jumlah data yang dibaca.

package main

import (
	"fmt"
	"io"
	"strings"
)

func main() {
	r := io.LimitReader(strings.NewReader("abcdefgh"), 3)
	data, _ := io.ReadAll(r)
	fmt.Println(string(data))
}

Mengapa Satu Antarmuka Unggul

  • Memisahkan kode dari sumber data
  • Mudah diuji dengan teks atau bita
  • Dapat dirangkai dengan pembungkus seperti LimitReader, gzip, dan lainnya

Pemeriksaan Singkat

Ujilah pengetahuan Anda tentang io.Reader.

Ringkasan

Anda telah mempelajari antarmuka masukan inti.

  • Read(p []byte) (int, error) adalah seluruh kontraknya
  • Lakukan pengulangan hingga io.EOF; proses bita sebanyak n terlebih dahulu
  • io.ReadAll, strings/bytes.NewReader, dan LimitReader
  • Terimalah io.Reader dalam API Anda

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Interface Reader” gratis?

Ya — teks lengkap “Interface Reader” 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 “Interface Reader”?

Inti I/O Go 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 1 dari 4.

Berapa lama pelajaran “Interface Reader” 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.

Semua pelajaran dalam kursus ini

  1. Interface Reader
  2. Interface Writer
  3. Fungsi Utilitas io
  4. Mengimplementasikan Reader Kustom
← Kembali ke Go Academy