当前位置: 首页 > news >正文

用go语言后端开发速查

在这里插入图片描述

文章目录

  • 一、发送请求和接收请求示例
    • 1.1 发送请求
    • 1.2 接收请求
  • 二、发送form-data格式的数据示例

用go语言发送请求和接收请求的快速参考

一、发送请求和接收请求示例

1.1 发送请求

package mainimport ("bytes""encoding/json""fmt""net/http"
)type Payload struct {Name  string `json:"topic"`Value string `json:"data"`
}func main() {// 构造要发送的数据payload := Payload{Name:  "example",Value: "this is a test",}// 将数据编码为JSONjsonData, err := json.Marshal(payload)if err != nil {fmt.Println("Error encoding JSON:", err)return}// 发送POST请求resp, err := http.Post("http://localhost:8080/devStatistic/pushDevStatistic","application/json", bytes.NewBuffer(jsonData))if err != nil {fmt.Println("Error sending POST request:", err)return}defer resp.Body.Close()// 打印响应状态fmt.Println("Response status:", resp.Status)
}

1.2 接收请求

package mainimport ("encoding/json""fmt""io/ioutil""net/http"
)type Payload struct {Name  string `json:"name"`Value string `json:"value"`
}func handler(w http.ResponseWriter, r *http.Request) {if r.Method == "POST" {// 读取请求体中的数据body, err := ioutil.ReadAll(r.Body)if err != nil {http.Error(w, "Error reading request body", http.StatusInternalServerError)return}// 打印原始请求体内容fmt.Println("Received request body:", string(body))// 将请求体数据解析为结构体var payload Payloaderr = json.Unmarshal(body, &payload)if err != nil {http.Error(w, "Error parsing JSON", http.StatusBadRequest)return}// 打印解析后的数据fmt.Printf("Parsed data: Name = %s, Value = %s\n", payload.Name, payload.Value)// 返回响应fmt.Fprintf(w, "Received data: Name = %s, Value = %s\n", payload.Name, payload.Value)} else {// 处理其他请求w.WriteHeader(http.StatusMethodNotAllowed)}
}func main() {http.HandleFunc("/", handler)fmt.Println("Server is running on http://localhost:8080")if err := http.ListenAndServe(":8080", nil); err != nil {fmt.Println("Error starting server:", err)}
}

二、发送form-data格式的数据示例

// sender.go
package mainimport ("bytes""fmt""mime/multipart""net/http"
)// SendHTTPSMessage 使用 multipart/form-data 发送消息
func SendHTTPSMessage(topic, text, ip string, port int) error {// 创建一个缓冲区用来存放 form-data 数据var formDataBuffer bytes.Bufferwriter := multipart.NewWriter(&formDataBuffer)// 添加 form-data 字段err := writer.WriteField("topic", topic)if err != nil {return fmt.Errorf("error adding topic field: %v", err)}err = writer.WriteField("content", text)if err != nil {return fmt.Errorf("error adding content field: %v", err)}// 关闭 writer,以便生成完整的 form-dataerr = writer.Close()if err != nil {return fmt.Errorf("error closing writer: %v", err)}// 构建目标 URLurl := fmt.Sprintf("https://%s:%d/api/send_message", ip, port)// 创建 HTTP POST 请求req, err := http.NewRequest("POST", url, &formDataBuffer)if err != nil {return fmt.Errorf("error creating HTTP request: %v", err)}// 设置请求头的 Content-Type 为 multipart/form-data,并包含 boundary 信息req.Header.Set("Content-Type", writer.FormDataContentType())// 创建 HTTP 客户端并发送请求client := &http.Client{}resp, err := client.Do(req)if err != nil {return fmt.Errorf("error sending HTTPS request: %v", err)}defer resp.Body.Close()// 打印响应状态fmt.Println("Response Status:", resp.Status)return nil
}

解释

  1. 使用 multipart.NewWriter** 创建 form-data**:
    • multipart.NewWriter 创建了一个 writer,可以将字段添加到 form-data。
    • 使用 WriteField 方法添加 topic 和 content 字段到 form-data。
  2. 设置 Content-Type
    • req.Header.Set(“Content-Type”, writer.FormDataContentType()) 会自动生成包含 boundary 的 Content-Type,这是 multipart/form-data 必需的格式。
  3. 发送请求:
    • 创建 HTTP 客户端并发送请求,与 JSON 的方式相同。
http://www.lryc.cn/news/488772.html

相关文章:

  • GeekChallenge 2024 第十五届极客大挑战 pwn AK
  • 禅道是什么,nas是什么,ssh是什么,finalshell是什么,git命令feat 、fix分别什么意思
  • 点云-半径搜索法-Radius Search
  • P11290 【MX-S6-T2】「KDOI-11」飞船
  • WebGIS地图框架有哪些?
  • 量化加速知识点(整理中。。。)
  • BLIP-2模型的详解与思考
  • 2024年11月22日 十二生肖 今日运势
  • 小米C++ 面试题及参考答案上(120道面试题覆盖各种类型八股文)
  • SQL SELECT 语句:基础与进阶应用
  • 微服务即时通讯系统的实现(服务端)----(1)
  • 《Spring 依赖注入方式全解析》
  • 【C++动态规划】1411. 给 N x 3 网格图涂色的方案数|1844
  • 外包干了3年,技术退步明显...
  • SpringBoot 2.x 整合 Redis
  • React的API✅
  • 什么是全渠道客服中心?都包括哪些电商平台?
  • Jtti:如何知晓服务器的压力上限?具体的步骤和方法
  • 贪心算法(1)
  • SpringBoot,IOC,DI,分层解耦,统一响应
  • 目标驱动学习python动力
  • 力扣-Hot100-回溯【算法学习day.39】
  • 小熊派Nano接入华为云
  • 【linux硬件操作系统】计算机硬件常见硬件故障处理
  • 谈学生公寓安全用电系统的涉及方案
  • 自动语音识别(ASR)与文本转语音(TTS)技术的应用与发展
  • Go 语言数组
  • 13. 【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--完善TODO标记的代码
  • 深入剖析Java内存管理:机制、优化与最佳实践
  • 【Amazon】亚马逊云科技Amazon DynamoDB 实践Amazon DynamoDB