Go 语言实现 API 请求:从基础到高级全面指南

引言

Go 语言(亦称 Golang)以其简洁性和高性能而闻名,非常适合进行 API 请求处理。本文将向您全面介绍如何使用 Go 语言进行 API 请求,内容涵盖从初学者到高级开发者的各个层次。通过丰富的代码示例,让您掌握 Go 语言处理 API 请求的技巧。

基础 GET 请求

首先,让我们从最基础的 GET 请求开始。下面的代码展示了如何向特定 URL 发送 GET 请求并接收响应。

package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {
    response, err := http.Get("http://example.com")
    if err != nil {
        fmt.Print(err.Error())
        return
    }
    responseData, err := ioutil.ReadAll(response.Body)
    if err != nil {
        fmt.Print(err.Error())
        return
    }
    fmt.Println(string(responseData))
}

发送 POST 请求

接下来,我们看看如何发送数据的 POST 请求。下面的例子展示了如何将 JSON 格式的数据 POST 到 API。

package main

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

type ExampleRequest struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    request := ExampleRequest{Name: "John Doe", Age: 30}
    jsonReq, err := json.Marshal(request)
    if err != nil {
        fmt.Println(err)
        return
    }

    resp, err := http.Post("http://example.com/api", "application/json", bytes.NewBuffer(jsonReq))
    if err != nil {
        fmt.Println(err)
        return
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(body))
}

复杂请求与错误处理

在 Go 语言中,您可以灵活处理更复杂的请求和错误。下面的示例创建了一个带有自定义头部的请求,并进行了错误处理。

package main

import (
    "bytes"
    "fmt"
    "io/ioutil"
    "net/http"
)

func main() {
    client := &http.Client{}
    req, err := http.NewRequest("POST", "http://example.com/api", bytes.NewBuffer([]byte("request body")))
    if err != nil {
        fmt.Println(err)
        return
    }

    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("Custom-Header", "value")

    resp, err := client.Do(req)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(body))
}

并行请求处理

最后,让我们看看 Go 语言的一大强项——并发处理 API 请求。以下代码展示了如何并行处理多个 API 请求并处理结果。

package main

import (
    "fmt"
    "net/http"
    "sync"
)

func fetch(url string, wg *sync.WaitGroup) {
    defer wg.Done()

    resp, err := http.Get(url)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("Completed %s\n", url)
}

func main() {
    urls := []string{
        "http://example.com/1",
        "http://example.com/2",
        "http://example.com/3",
    }

    var wg sync.WaitGroup
    for _, url := range urls {
        wg.Add(1)
        go fetch(url, &wg)
    }
    wg.Wait()
}

总结

本文介绍了使用 Go 语言进行 API 请求的多种方法。从基础的 GET/POST 请求到复杂请求和并发处理,您可以利用 Go 语言的灵活性和强大功能,高效处理各种 API 请求。参考这些代码示例,尝试用 Go 语言开发 API 吧。

タイトルとURLをコピーしました