用go语言后端开发速查

news2024/11/20 15:04:47

在这里插入图片描述

文章目录

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

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

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

1.1 发送请求

package main

import (
	"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",
	}

	// 将数据编码为JSON
	jsonData, 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 main

import (
	"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 Payload
		err = 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 main

import (
        "bytes"
        "fmt"
        "mime/multipart"
        "net/http"
)

// SendHTTPSMessage 使用 multipart/form-data 发送消息
func SendHTTPSMessage(topic, text, ip string, port int) error {
        // 创建一个缓冲区用来存放 form-data 数据
        var formDataBuffer bytes.Buffer
        writer := 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-data
        err = writer.Close()
        if err != nil {
                return fmt.Errorf("error closing writer: %v", err)
        }

        // 构建目标 URL
        url := 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.coloradmin.cn/o/2244102.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【视频讲解】Python深度神经网络DNNs-K-Means(K-均值)聚类方法在MNIST等数据可视化对比分析...

全文链接:https://tecdat.cn/?p38289 分析师:Cucu Sun 近年来,由于诸如自动编码器等深度神经网络(DNN)的高表示能力,深度聚类方法发展迅速。其核心思想是表示学习和聚类可以相互促进:好的表示会…

可视化展示深度学习模型中模块的详细流程图:结合GraphvizOnline

一、在GPT中输入指令 根据以下Python模块代码&#xff0c;自动生成对应的Graphviz流程图代码&#xff0c;并保持图表简洁清晰&#xff0c;仅展示主流程&#xff1a; <模块代码>1. 以YOLOv9中ADown下采样为例&#xff1a; 根据以下Python模块代码&#xff0c;自动生成对…

强大的正则表达式——Hard

由前两篇文章《Easy》中提到过的&#xff1a; 还是先相信一下AI&#xff0c;让AI写个生成满足难度3的正则表达式的python代码&#xff0c;但还是出错了&#xff0c;还是不能什么都指望AI 了解了一下相关知识&#xff0c;CRC本质上是多项式除法&#xff0c;所以同样可以得到对应…

Xilinx 7 系列 FPGA的各引脚外围电路接法

Xilinx 7系列FPGA的外围电路接法涉及到多个方面&#xff0c;包括电源引脚、时钟输入引脚、FPGA配置引脚、JTAG调试引脚&#xff0c;以及其他辅助引脚。 本文大部分内容由ug475, Product Specification——7 Series FPGAs Packaging and Pinout《7系列FPGA的封装与引脚》整理汇…

IDM扩展添加到Edge浏览器

IDM扩展添加到Edge浏览器 一般情况下&#xff0c;当安装IDM软件后&#xff0c;该软件将会自动将IDM Integration Module浏览器扩展安装到Edge浏览器上&#xff0c;但在某些情况下&#xff0c;需要我们手动安装&#xff0c;以下为手动安装步骤 手动安装IDM扩展到Edge浏览器 打…

使用OpenUI智能生成专业级网页UI实现远程高效前端开发新手指南

文章目录 前言1. 本地部署Open UI1.1 安装Git、Python、pip1.2 安装Open UI 2. 本地访问Open UI3. 安装Cpolar内网穿透4. 实现公网访问Open UI5. 固定Open UI 公网地址 前言 今天给大家带来一篇非常实用的技术分享&#xff0c;介绍如何在Windows系统本地部署OpenUI&#xff0c…

Vue3 虚拟列表组件库 virtual-list-vue3 的使用

Vue3 虚拟列表组件库 virtual-list-vue3 的基本使用 分享个人写的一个基于 Vue3 的虚拟列表组件库&#xff0c;欢迎各位来进行使用与给予一些更好的建议&#x1f60a; 概述&#xff1a;该组件组件库用于提供虚拟化列表能力的组件&#xff0c;用于解决展示大量数据渲染时首屏渲…

数据库中库的操作

数据库中库的操作 查看数据库语法 创建数据库语法⽰例创建⼀个名为test班级号的数据库⾃定义⼀个数据库名&#xff0c;如果数据库不存则创建重新运⾏上⾯的语句观察现象查看警告信息 字符集编码和校验(排序)规则查看数据库⽀持的字符集编码查看数据库⽀持的排序规则不同的字串集…

【MySQL-3】表的约束

目录 1. 整体学习的思维导图 2. 非空约束 3. default约束 4. No Null和default约束 5. 列描述 comment 6. Zerofill 7. 主键 primary key 复合主键 8. 自增长 auto_increment 9. 唯一键 10. 外键 11. 实现综合案例 1. 整体学习的思维导图 2. 非空约束 正如该标题一…

C++设计模式行为模式———迭代器模式

文章目录 一、引言二、迭代器模式三、总结 一、引言 迭代器模式是一种行为设计模式&#xff0c; 让你能在不暴露集合底层表现形式 &#xff08;列表、 栈和树等&#xff09; 的情况下遍历集合中所有的元素。C标准库中内置了很多容器并提供了合适的迭代器&#xff0c;尽管我们不…

自存 sql常见语句和实际应用

关于连表 查询两个表 SELECT * FROM study_article JOIN study_article_review 查询的就是两个表相乘&#xff0c;结果为两个表的笛卡尔积 相这样 这种并不是我们想要的结果 通常会添加一些查询条件 SELECT * FROM study_articleJOIN study_article_review ON study_art…

为自动驾驶提供高分辨率卫星图像数据,实例级标注数据集OpenSatMap

对于交通控制、自动驾驶等任务来说&#xff0c;大规模的高分辨率与更新频率的地图至关重要。现有的地图构建方法多依赖地面采集数据&#xff0c;这种方法的精度固然较高&#xff0c;但在覆盖范围、更新频率却存在限制&#xff0c;测绘成本也相当高昂。 相比之下&#xff0c;使…

基于STM32的智能语音识别饮水机系统设计

功能描述 1、给饮水机设定称呼&#xff0c;喊出称呼&#xff0c;饮水机回答&#xff1a;我在 2、语音进行加热功能&#xff0c;说&#xff1a;请加热&#xff0c;加热片运行 3、饮水机水位检测&#xff0c;低于阈值播报“水量少&#xff0c;请换水” 4、检测饮水机水温&#xf…

百度世界2024精选公开课:基于地图智能体的导航出行AI应用创新实践

11月12日&#xff0c;“百度世界2024”在上海世博中心举行。百度创始人、董事长兼首席执行官李彦宏发表了主题为《应用来了》的演讲。 百度地图也为大家带来了干货满满、精彩纷呈的智能体公开课&#xff0c;由百度地图开放平台技术架构师江畅分享《地图智能体&#xff1a;导航…

sourceInsight常用设置和功能汇总(不断更新)(RGB、高亮、全路径、鼠标、宏、TODO高亮)

文章目录 必开配置设置背景颜色护眼的RGB值&#xff1f;sourceInsight4.0中如何设置选中某个单词以后自动高亮的功能&#xff1f;sourceinsight中输入设置显示全路径&#xff1f; 常用sourceInsight4.0中文乱码怎么解决&#xff0c;注意事项是什么&#xff1f;如何绑定鼠标中键…

[JavaWeb] 尚硅谷JavaWeb课程笔记

1 Tomcat服务器 Tomcat目录结构 bin&#xff1a;该目录下存放的是二进制可执行文件&#xff0c;如果是安装版&#xff0c;那么这个目录下会有两个exe文件&#xff1a;tomcat10.exe、tomcat10w.exe&#xff0c;前者是在控制台下启动Tomcat&#xff0c;后者是弹出GUI窗口启动To…

uniapp开发微信小程序笔记2-开发静态页面(新建页面、内置组件、设置编译模式、样式、SCSS的使用)

前言&#xff1a;本文从新建页面、认识内置组件、设置编译模式、样式、SCSS的使用来逐步形成对微信小程序开发结构的认识 一、新建页面 pages就是放页面代码的文件夹&#xff0c;点击新建页面就可以自动新增页面&#xff0c;并且可以看到pages.json里面也会自动添加该页面的路…

Linux插件zsh(oh-my-zsh)

一、oh-my-zsh基本介绍 oh-my-zsh&#xff1a; https://github.com/ohmyzsh/ohmyzshhttps://github.com/ohmyzsh/ohmyzsh 注意&#xff1a;需要先安装zsh命令&#xff0c;才能安装oh-my-zsh&#xff0c;先测试是否安装了zsh rootserver:/opt # zsh --version zsh 5.8 (x86_6…

第7章硬件测试-7.4 专业实验

7.4 专业实验 7.4.1 EMC测试EMS的测试项目如下。1.静电放电抗扰度&#xff08;ESD&#xff09;2.辐射电磁场&#xff08;80 MHz~1000 MHz&#xff09;抗扰度&#xff08;RS&#xff09;3.电快速瞬变/脉冲群抗扰度4.浪涌&#xff08;雷击&#xff09;抗扰度5.注入电流&#xff0…

H.265流媒体播放器EasyPlayer.js H.264/H.265播放器chrome无法访问更私有的地址是什么原因

EasyPlayer.js H5播放器&#xff0c;是一款能够同时支持HTTP、HTTP-FLV、HLS&#xff08;m3u8&#xff09;、WS、WEBRTC、FMP4视频直播与视频点播等多种协议&#xff0c;支持H.264、H.265、AAC、G711A、MP3等多种音视频编码格式&#xff0c;支持MSE、WASM、WebCodec等多种解码方…