← 返回博客

Go 语言中的 Google Search API:完整教程 (2026)

在 Go(Golang)中使用 Google Search API —— net/http 请求、将 JSON 解码到结构体、重试与分页。可直接复制粘贴的 serp.cheap 示例。

1 分钟阅读

只用标准库,从 Go 中查询 Google,使用 serp.cheap——或者引入官方 Go SDK(go get github.com/serpcheap/serpcheap-go)。无论哪种方式,它都只是一个普通的 HTTP+JSON 端点。

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
)

type Result struct {
	Position int    `json:"position"`
	Title    string `json:"title"`
	Link     string `json:"link"`
	Snippet  string `json:"snippet"`
}

type Response struct {
	Organic []Result `json:"organic"`
	Stats   struct {
		Balance int  `json:"balance"`
		Cost    int  `json:"cost"`
		Cached  bool `json:"cached"`
	} `json:"stats"`
}

func search(apiKey, q, gl string, page int) (*Response, error) {
	body, _ := json.Marshal(map[string]any{"q": q, "gl": gl, "page": page})
	req, _ := http.NewRequest("POST", "https://api.serp.cheap/v1/search", bytes.NewReader(body))
	req.Header.Set("X-API-Key", apiKey)
	req.Header.Set("Content-Type", "application/json")

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()
	if resp.StatusCode != http.StatusOK {
		return nil, fmt.Errorf("search failed: HTTP %d", resp.StatusCode)
	}
	var out Response
	if err := json.NewDecoder(resp.Body).Decode(&out); err != nil {
		return nil, err
	}
	return &out, nil
}

func main() {
	res, err := search("YOUR_KEY", "best electric cars 2026", "us", 1)
	if err != nil {
		panic(err)
	}
	for _, r := range res.Organic {
		fmt.Printf("#%d %s — %s\n", r.Position, r.Title, r.Link)
	}
	fmt.Printf("cost: %d credits, cached: %v\n", res.Stats.Cost, res.Stats.Cached)
}

在生产环境中,请为 429/5xx 添加带指数退避的重试,并使用 context.Context 超时。

下一步

Frequently asked questions

如何在 Go 中调用 Google Search API?+

使用 net/http 向 SERP API POST 一个 JSON 请求体,并将响应解码到结构体中。使用 serp.cheap 时,端点是 https://api.serp.cheap/v1/search,并带上 X-API-Key 请求头。

我需要第三方 Go SDK 吗?+

不需要 —— 标准库的 net/http 和 encoding/json 就够了。SERP API 只是一个普通的 HTTP+JSON 端点。

获取你的 API 密钥

直接购买最便宜, 用银行卡或加密货币支付,无需 KYC。或通过市场。