Чтение файлов с os и bufio
Безопасно открывайте, читайте строки и закрывайте файлы
«Чтение файлов с os и bufio» — бесплатный урок Go Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
os.ReadFile
os.ReadFile (Go 1.16+) за один вызов считывает весь файл в срез байтов. Это простой и идиоматичный способ для небольших файлов.
data, err := os.ReadFile("config.json")
if err != nil { log.Fatal(err) }
fmt.Println(string(data))os.Open и ручное закрытие
Для большего контроля откройте файл с помощью os.Open (только для чтения) и закройте его с помощью defer:
f, err := os.Open("data.txt")
if err != nil { return err }
defer f.Close()Чтение в буфер
Считывайте фрагмент байтов с помощью f.Read(buf). Функция возвращает количество считанных байтов и io.EOF, когда файл заканчивается.
buf := make([]byte, 1024)
n, err := f.Read(buf)
if err != nil && err != io.EOF { return err }
fmt.Println(string(buf[:n]))bufio.NewReader
Оберните файл в bufio.Reader, чтобы буферизировать чтение и сократить количество системных вызовов. Доступны методы ReadString, ReadLine и ReadByte.
reader := bufio.NewReader(f)
line, err := reader.ReadString('\n')Построчное чтение с помощью bufio.Scanner
bufio.NewScanner — идиоматичный способ построчно считывать текстовый файл. Функция разделения по умолчанию — ScanLines.
scanner := bufio.NewScanner(f)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil { return err }Пользовательский буфер сканера
Буфер сканера по умолчанию имеет размер 64 КиБ. Для файлов с очень длинными строками увеличьте буфер с помощью scanner.Buffer.
buf := make([]byte, 1024*1024)
scanner.Buffer(buf, len(buf))io.ReadAll
io.ReadAll считывает данные из любого io.Reader до EOF и возвращает байты. Это удобно для чтения сетевых соединений, тел ответов или файлов, обёрнутых в средства чтения.
data, err := io.ReadAll(f)Сканирование слов и байтов
Замените функцию разделения сканера, чтобы сканировать слова (bufio.ScanWords) или отдельные байты (bufio.ScanBytes).
scanner.Split(bufio.ScanWords)
for scanner.Scan() {
fmt.Println(scanner.Text())
}Чтение структурированного текста
После чтения строк используйте strings.Fields или strings.Split, чтобы разобрать столбцы:
for scanner.Scan() {
fields := strings.Fields(scanner.Text())
// fields[0], fields[1], ...
}Ошибки чтения файла
Всегда проверяйте Err() сканера после цикла сканирования: он возвращает первую ошибку, отличную от EOF. Цикл, завершившийся обычным образом без считывания строк, всё равно мог столкнуться с ошибкой.
Чтение именованного stdin
Используйте os.Stdin везде, где принимается io.Reader. Благодаря этому инструменты CLI работают и с аргументами-файлами, и с перенаправленным вводом.
scanner := bufio.NewScanner(os.Stdin)Быстрая проверка
Какой тип bufio является идиоматичным способом построчного чтения текстового файла в Go?
Итоги: чтение файлов
Основные положения:
- os.ReadFile: считывает весь небольшой файл за один вызов
- bufio.Scanner: построчное чтение; после цикла проверяйте Err()
- bufio.Reader: буферизованное чтение, сокращающее количество системных вызовов
- io.ReadAll: полностью считывает данные из любого io.Reader
Часто задаваемые вопросы
Урок «Чтение файлов с os и bufio» бесплатный?
Да — полный текст урока «Чтение файлов с os и bufio» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Чтение файлов с os и bufio»?
Безопасно открывайте, читайте строки и закрывайте файлы Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Чтение файлов с os и bufio»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Чтение файлов с os и bufio
- Запись файлов и временные файлы
- Кодирование и декодирование JSON
- Потоковая обработка JSON и CSV