> ## Documentation Index
> Fetch the complete documentation index at: https://student-213fb9fc.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Go

> Firecrawl Go SDK 是对 Firecrawl API 的封装，帮助你轻松将网站转换为 Markdown。

<Warning>
  此 SDK 目前使用 Firecrawl API 的 **v1** 版本，非最新（已提供 v2）。部分功能和改进可能仅在 v2 中可用。
</Warning>

<div id="installation">
  ## 安装
</div>

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

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

<div id="usage">
  ## 使用
</div>

1. 从 [firecrawl.dev](https://firecrawl.dev) 获取 API 密钥。
2. 在 `FirecrawlApp` 结构体中将 `API key` 设置为参数。
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) 
}
```

<div id="scraping-a-url">
  ### 抓取单个 URL
</div>

要在包含错误处理的情况下抓取单个 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)
```

<div id="crawling-a-website">
  ### 爬取网站
</div>

要爬取网站，请使用 `CrawlUrl` 方法。该方法接受起始 URL 和可选参数。通过 `params` 参数，你可以为爬取任务设置其他选项，例如最大爬取页数、允许的域名以及输出 formats。

```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) 
```

<div id="checking-crawl-status">
  ### 检查爬取状态
</div>

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

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

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

fmt.Println(crawlStatus)
```

<div id="map-a-website">
  ### 映射网站
</div>

使用 `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)
```

<div id="error-handling">
  ## 错误处理
</div>

SDK 会处理 Firecrawl API 返回的错误并抛出相应异常。若请求过程中发生错误，将抛出包含详细错误信息的异常。
