Go语言学习笔记:在WSL2和VSCode环境下运行HTTP请求示例

251 阅读3分钟

o语言学习笔记:在 WSL2 和 VSCode 环境下运行 HTTP 请求示例


环境配置

1. 配置 WSL2

在 Windows 下使用 WSL2 可以方便地运行 Linux 环境。建议使用 Ubuntu 20.04 或 22.04 版本。

配置步骤:
  1. 确保 Windows 启用了 WSL2,并已安装 Ubuntu。

  2. 更新 WSL 中的软件包:

    bashCopy code
    sudo apt update && sudo apt upgrade -y
    
  3. 安装 Go 语言环境:

    • 使用系统自带包管理器:

      bashCopy code
      sudo apt install golang-go
      
    • 或从 官方 Go 语言下载页面 安装最新版本。下载后解压至 /usr/local,并将路径添加到环境变量:

      bashCopy code
      wget https://go.dev/dl/go1.x.x.linux-amd64.tar.gz
      sudo tar -C /usr/local -xzf go1.x.x.linux-amd64.tar.gz
      echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
      source ~/.bashrc
      

2. 配置 VSCode

插件推荐:
  1. Go:支持 Go 语言的语法高亮、代码格式化和调试功能。
  2. Remote - WSL:允许 VSCode 在 WSL2 环境下运行。
配置步骤:
  1. 安装插件后,打开 VSCode 并在 WSL2 环境中打开项目文件夹。
  2. 确保已安装 Go 插件推荐的依赖工具,可通过 VSCode 提示自动完成。

示例代码说明

以下代码展示了如何发送 HTTP POST 请求并解析 JSON 响应:

goCopy code
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

type DictRequest struct {
	TransType string `json:"trans_type"`
	Source    string `json:"source"`
	UserID    string `json:"user_id"`
}

func main() {
	// 创建请求体
	reqBody := DictRequest{
		TransType: "en2zh",
		Source:    "hello",
		UserID:    "",
	}
	jsonData, err := json.Marshal(reqBody)
	if err != nil {
		log.Fatalf("JSON 序列化失败: %v", err)
	}

	// 创建 HTTP 请求
	url := "https://api.example.com/dict"
	req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
	if err != nil {
		log.Fatalf("创建请求失败: %v", err)
	}
	req.Header.Set("Content-Type", "application/json")

	// 发送 HTTP 请求
	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		log.Fatalf("请求失败: %v", err)
	}
	defer resp.Body.Close()

	// 读取响应
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatalf("读取响应失败: %v", err)
	}

	// 解析 JSON 响应
	var result map[string]interface{}
	if err := json.Unmarshal(body, &result); err != nil {
		log.Fatalf("JSON 解析失败: %v", err)
	}

	// 提取并打印结果
	if dictionary, ok := result["dictionary"].(map[string]interface{}); ok {
		if explanations, ok := dictionary["explanations"].([]interface{}); ok && len(explanations) > 0 {
			fmt.Println("第一条解释:", explanations[0])
		} else {
			fmt.Println("未找到解释")
		}
	} else {
		fmt.Println("响应数据格式错误")
	}
}

代码详解

1. HTTP 请求与 JSON 封装

  • 使用 json.Marshal 将结构体 DictRequest 转为 JSON 格式。
  • 使用 http.NewRequest 创建 POST 请求,并设置 URL 和请求体。

2. 设置 HTTP 头

  • Content-Type: application/json:标明请求体是 JSON 格式。
  • 可根据 API 要求添加其他头信息,如 Authorization 或 User-Agent

3. 响应处理

  • 使用 ioutil.ReadAll 读取响应体。
  • 使用 json.Unmarshal 将 JSON 响应解析为 Go 的 map[string]interface{}

4. 错误处理

  • 所有可能失败的步骤都添加了错误检查,便于排查问题。

运行代码

在 WSL2 中运行

  1. 将代码保存为 main.go

  2. 在终端中切换到代码所在目录,并运行:

    bashCopy code
    go run main.go
    
  3. 如果一切配置正常,终端会输出翻译结果。 image.png

成功显示出单词的翻译


常见问题与解决

问题 1:网络请求失败

  • 原因:目标 API 无法访问,可能是网络问题或 API 服务不可用。

  • 解决

    1. 检查网络连接:

      bashCopy code
      ping api.example.com
      
    2. 如果 API 需要授权,确保 Authorization 或 token 正确。

问题 2:未找到解释

  • 原因:响应数据格式与预期不符,可能是请求参数错误。

  • 解决

    1. 打印完整的响应数据以确认:

      goCopy code
      fmt.Println(string(body))
      
    2. 检查 API 文档,确保请求体的字段名和值符合规范。


通过上述方法,你可以在 WSL2 和 VSCode 环境中流畅地编写和运行 Go 语言程序。