Skip to content

Выбор формата вывода

Это руководство поможет вам сделать правильный выбор между тремя форматами вывода: простой текст, Markdown и JSON.

Сравнение форматов

ОсобенностьПростой текстMarkdownJSON
ЧитаемостьВысокаяВысокаяНизкая (удобно для машин)
Сохранение структурыНетЗаголовки/списки/ссылки/изображенияПолные метаданные
Обработка изображУдаление![alt](url)Список ImageInfo
Обработка ссылокТолько текст[text](url)Список LinkInfo
Поддержка таблицНетMarkdown-таблицыИсходные данные
Применимые сценарииПоисковые индексы/анализ текстаБлоги/документация/ридерыAPI-передача/хранение данных

Простой текст

Самый лёгкий способ вывода, сохраняется только текстовое содержимое, удаляются все HTML-теги и форматирование.

go
text, err := html.ExtractText(data)
if err != nil {
    log.Fatal(err)
}
fmt.Println(text)

Применимые сценарии

  • Построение поисковых индексов
  • Анализ текста и обработка NLP
  • Генерация сводок и предпросмотров
  • Подсчёт слов и времени чтения

Особенности

  • alt-текст изображений удаляется; видимый текст ссылок сохраняется (убираются только URL и Markdown-разметка)
  • Между заголовками и абзацами сохраняются переносы строк
  • Содержимое списков представлено в виде простого текста
  • Таблицы рендерятся согласно TableFormat (по умолчанию Markdown-таблицы)

Markdown

Сохраняет структуру документа с хорошей читаемостью, подходит для миграции контента и чтения.

go
// Способ 1: функция уровня пакета
md, err := html.ExtractToMarkdown(data)

// Способ 2: использование Processor
p, _ := html.New()
defer p.Close()
md2, err := p.ExtractToMarkdown(data)

Пример вывода

Входной HTML:

html
<article>
    <h1>Введение в Go</h1>
    <p>Go — это компилируемый язык.</p>
    <img src="gopher.png" alt="Gopher" />
    <a href="https://go.dev">Официальный сайт Go</a>
</article>

Вывод Markdown:

markdown
Введение в Go

Go — это компилируемый язык.

![Gopher](gopher.png)
[Официальный сайт Go](https://go.dev)

Параметры формата

Формат Markdown управляется двумя полями конфигурации:

go
cfg := html.DefaultConfig()
cfg.InlineImageFormat = "markdown"  // "none" | "markdown" | "html" | "placeholder"
cfg.InlineLinkFormat = "markdown"   // "none" | "markdown" | "html"
ЗначениеВывод изображений (InlineImageFormat)Вывод ссылок (InlineLinkFormat)
noneУдалениеТолько текст
markdown![alt](url)[text](url)
html<img src="..." alt="..."><a href="...">text</a>
placeholder[IMAGE:N]- (не поддерживается)

Используйте MarkdownConfig()

Предустановка MarkdownConfig() уже устанавливает форматы изображений и ссылок в markdown, используйте её напрямую без ручной настройки.

Формат placeholder

placeholder применяется только к InlineImageFormat и сохраняет заполнители [IMAGE:N] в тексте. InlineLinkFormat не поддерживает это значение, доступны только none, markdown, html.

Применимые сценарии

  • Миграция контента в Markdown-блоги/статические сайты
  • Генерация тела писем
  • Конвертация форматов документов
  • Генерация контента для RSS / Newsletter

JSON

Структурированный вывод, сохраняющий полные метаданные, подходит для межпрограммной передачи и постоянного хранения.

go
jsonBytes, err := html.ExtractToJSON(data)
if err != nil {
    log.Fatal(err)
}
fmt.Println(string(jsonBytes))

Структура вывода

json
{
  "text": "Введение в Go\n\nGo — это компилируемый язык.\n\nОфициальный сайт Go",
  "title": "Введение в Go",
  "images": [
    {"url": "gopher.png", "alt": "Gopher", "title": "", "width": "", "height": "", "is_decorative": false, "position": 1}
  ],
  "links": [
    {"url": "https://go.dev", "text": "Официальный сайт Go", "title": "", "is_external": true, "is_nofollow": false, "position": 1}
  ],
  "processing_time_ms": 2,
  "word_count": 6,
  "reading_time_ms": 1800
}

Поля времени

В JSON-выводе ProcessingTime и ReadingTime автоматически конвертируются в миллисекунды (processing_time_ms, reading_time_ms), что удобно для потребления фронтендом и API.

Применимые сценарии

  • Данные ответов API
  • Хранение в базе данных
  • Передача между микросервисами
  • Интеграция с фронтенд-приложениями

Извлечение из файлов в различных форматах

Каждый формат поддерживает чтение из файлов:

go
// Простой текст
text, err := html.ExtractTextFromFile("page.html")

// Markdown
md, err := html.ExtractToMarkdownFromFile("page.html")

// JSON
jsonBytes, err := html.ExtractToJSONFromFile("page.html")

Версии с контекстом

Все функции форматирования имеют варианты ExtractWithContext с поддержкой тайм-аута и отмены:

go
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()

md, err := html.ExtractToMarkdownWithContext(ctx, data)

Решение о выборе

text
Нужен для потребления программой?── Да ──→ JSON

        Нет

Нужно сохранить форматирование?── Да ──→ Markdown

        Нет

        └──→ Простой текст

Следующие шаги