> ## Documentation Index
> Fetch the complete documentation index at: https://firecrawl.web3doc.top/llms.txt
> Use this file to discover all available pages before exploring further.

# Go

> Firecrawl Go SDK 是 Firecrawl API 的一个包装器，帮助您轻松将网站转换为 Markdown。

## 安装

要安装 Firecrawl Go SDK，您可以使用 go get：

```bash Go theme={null}
go get github.com/mendableai/firecrawl-go
```

## 使用方法

1. 从 [firecrawl.dev](https://firecrawl.dev) 获取一个 API key
2. 将 `API key` 作为参数设置到 `FirecrawlApp` 结构体中。
3. 设置 `API URL` 和/或将其作为参数传递到 `FirecrawlApp` 结构体中。默认为 `https://api.firecrawl.dev`。
4. 设置 `version` 和/或将其作为参数传递到 `FirecrawlApp` 结构体中。默认为 `v1`。

下面是如何使用该 SDK 并处理错误的示例：

```go Go theme={null}
import (
	"fmt"
	"log"
	"github.com/google/uuid"
	"github.com/mendableai/firecrawl-go"
)

func ptr[T any](v T) *T {
	return &v
}

func main() {
	// 使用API密钥初始化FirecrawlApp
	apiKey := "fc-YOUR_API_KEY"
	apiUrl := "https://api.firecrawl.dev"
	version := "v1"

	app, err := firecrawl.NewFirecrawlApp(apiKey, apiUrl, version)
	if err != nil {
		log.Fatalf("无法初始化FirecrawlApp: %v", err)
	}

  // 抓取网站内容
  scrapeStatus, err := app.ScrapeUrl("https://firecrawl.dev", firecrawl.ScrapeParams{
    Formats: []string{"markdown", "html"},
  })
  if err != nil {
    log.Fatalf("发送抓取请求失败: %v", err)
  }

  fmt.Println(scrapeStatus)

	// 爬取网站内容
  idempotencyKey := uuid.New().String() // 可选的幂等性键
  crawlParams := &firecrawl.CrawlParams{
		ExcludePaths: []string{"blog/*"},
		MaxDepth:     ptr(2),
	}

	crawlStatus, err := app.CrawlUrl("https://firecrawl.dev", crawlParams, &idempotencyKey)
	if err != nil {
		log.Fatalf("发送爬取请求失败: %v", err)
	}

	fmt.Println(crawlStatus)
}
```

### 抓取一个 URL

要抓取单个 URL 并处理错误，请使用 `ScrapeURL` 方法。它接受 URL 作为参数，并返回抓取的数据作为一个字典。

```go Go theme={null}
// 抓取一个网站
scrapeResult, err := app.ScrapeUrl("https://firecrawl.dev", map[string]any{
  "formats": []string{"markdown", "html"},
})
if err != nil {
  log.Fatalf("抓取 URL 失败: %v", err)
}

fmt.Println(scrapeResult)
```

### 爬取一个网站

要爬取一个网站，请使用 `CrawlUrl` 方法。它接受起始 URL 和可选参数作为参数。`params` 参数允许您指定额外的选项，例如要爬取的最大页面数、允许的域名和输出格式。

```go Go theme={null}
crawlStatus, err := app.CrawlUrl("https://firecrawl.dev", map[string]any{
  "limit": 100,
  "scrapeOptions": map[string]any{
    "formats": []string{"markdown", "html"},
  },
})
if err != nil {
  log.Fatalf("发送爬取请求失败: %v", err)
}

fmt.Println(crawlStatus) 
```

### 检查爬取状态

要检查爬取任务的状态，请使用 `CheckCrawlStatus` 方法。它接受任务 ID 作为参数，并返回爬取任务的当前状态。

```go Go theme={null}
// 获取爬取状态
crawlStatus, err := app.CheckCrawlStatus("<crawl_id>")

if err != nil {
  log.Fatalf("获取爬取状态失败: %v", err)
}

fmt.Println(crawlStatus)
```

### 映射一个网站

使用 `MapUrl` 来生成网站的 URL 列表。`params` 参数让您可以自定义映射过程，包括排除子域或利用站点地图的选项。

```go Go theme={null}
// 映射一个网站
mapResult, err := app.MapUrl("https://firecrawl.dev", nil)
if err != nil {
  log.Fatalf("无法映射 URL: %v", err)
}

fmt.Println(mapResult)
```

## 错误处理

SDK 会处理 Firecrawl API 返回的错误并抛出适当的异常。如果在请求过程中发生错误，将抛出带有描述性错误消息的异常。
