只用标准库,从 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 超时。