【Golang | http】使用http库完成一个简单的POST请求

news2024/10/4 5:32:40

引言

主要记录使用Golang实现一个POST请求所用到的小知识点

1、项目结构

客户端向服务端注册用户信息,服务端返回注册信息中的用户名

PS E:\goland-workspace\GolangLearning\http> tree /f
卷 文件 的文件夹 PATH 列表
卷序列号为 0C66-1433
E:.
├─client
│      client.go
│
└─server
        server.go

1.1 server端

package main

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

// user结构体,用于保存request Body中json解码后的内容
type user struct {
	Name string
}

func registe(w http.ResponseWriter, r *http.Request) {
	user1 := &user{}
	body, _ := ioutil.ReadAll(r.Body)
	json.Unmarshal(body, user1)
	fmt.Fprintf(w, "The name you submit is %s", user1.Name)
}

func main() {
	http.HandleFunc("/register", registe)
	http.ListenAndServe(":8080", nil)
}

注:

  • func ReadAll(r io.Reader) ([]byte, error) 从r中读取所有数据,返回字节切片
  • func Unmarshal(data []byte, v any) error 解析json编码的数据,保存到指针v指向的值

1.2 Client端

package main

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

func main() {
	body := strings.NewReader(`{"name":"tian"}`)
	// body := strings.NewReader("{\"name\":\"tian\"}")
	req, _ := http.NewRequest("POST", "http://127.0.0.1:8080/register", body)
	res, _ := http.DefaultClient.Do(req)
	ret, _ := ioutil.ReadAll(res.Body)
	fmt.Println(string(ret))
}

注:

  • strings 库里的 func NewReader(s string) *Reader (NewReader returns a new Reader reading from s)类似于bytes库里 func NewBufferString(s string) *Bufferfunc NewReader(b []byte) *Reader
    这里{"name":"tian"}就是一段json格式的字符串,用反引号``括起来。当然也可以写成很麻烦的一种形式(body := strings.NewReader("{\"name\":\"tian\"}")

  • func NewRequest(method, url string, body io.Reader) (*Request, error)
    method方法会进行校验,常用的有GET,POST,PUT,DELETE等;
    url就是请求路径;
    body指http报文负荷就是要传输的内容,其实现了io.Reader,常见的有类型有*bytes.Buffer, *bytes.Reader, or *strings.Reader

2、运行

首先运行服务端,然后客户端发起请求,可以得到如下结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/421924.html

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

相关文章

小样本学习FSL介绍

1 概念 小样本学习(few-shot learning,FSL)旨在从有限的标记实例(通常只有几个)中学习,并对新的、未见过的实例进行识别。 相比于传统的深度学习和机器学习方法,小样本学习能够更好地模拟人类的…

从C出发 22 --- 变量的作用域与生命期

问题 1 : 这样子定义一个不属于任何函数的变量正确吗? 问题 2 : 编译能通过吗? 问题 : 我们要打印的var 到底是 10 还是 100. 总结: 什么都不会输出,因为这里的 i ;是让局部变量的 i ,程序会一直死循环 为什么都是 11,为什…

在构建个人想法时,使用哪个工具更好呢?Tana, AmpleNote 和 妙记多 Mojidoc的比较

笔记类 App 都很强调个人化,因为我们每个人会用不同的方法来做笔记、写日记。不过有一些框架可以帮助我们,比如子弹笔记(Bullet Journal)等。 Tana 和 Amplenote 都可以使用「标签」,尽管它们处理的方式、体验都大不相…

4.14~4.16学习总结

多线程: 同步代码块 格式:Synchronized(锁) { 操作共享数据的代码 } 特点1:锁默认打开,有一个线程进去了,锁自动关闭。 特点2:里面的代码全部执行完毕,线程处理,锁自动打开。 …

SaleSmartly(ss客服)怎么玩转Instagram自动化?

这段时间接触了不少粉丝,一直在说ins营销,说谁谁谁通过这个引流,结果爆了,那我们今天就来简单说一下。Instagram (IG) 是全球最大的照片和视频共享平台,拥有超过10亿的月活跃用户和 5 亿的日活跃Story用户。借助IG的强…

LNMP和论坛的搭建

系列文章目录 文章目录系列文章目录一、LNMP搭建1.承接上文搭建nginx服务2.Mysql数据库搭建3.安装配置 PHP 解析环境4.、部署 Discuz!社区论坛 Web 应用总结一、LNMP搭建 1.承接上文搭建nginx服务 2.Mysql数据库搭建 1、安装Mysql环境依赖包 yum -y install \ n…

不限量免注册,极速体验AI助手

最近 ChatGPT 很火,火到每个人都想玩一把,由于受限,不是在搭梯子就是在搭梯子的路上,现在类 ChatGPT 产品,它终于来了。还是先简单秀一波操作:第一波:大数据记录中,涉及关键字快速检…

vue2路由(上)

路由的简介 什么是路由? 用生活上的例子,路由器上的接口对应一个主机。 而由key和values组成的映射关系就是路由 主要用于SPA单页面应用 就是根据你端口号后面的路径,看你有没有配置这个页面对应的组件,如果有,那么就…

批处理脚本用法总结

目录一、常用命令二、基本语法1. rem 和 ::2. echo 和 3. pause4. errorlevel5. title6. color7. goto 和 :三、常见用法1. 设置临时环境变量2. 启动CMD执行命令3. 打开环境变量窗口参考资料:批处理(Batch),也称为批处理脚本。顾名思义,批处理…

零入门kubernetes网络实战-29->在同一个宿主机上基于虚拟网桥bridge链接不同网段的不同网络命名空间的通信方案

《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7193641905282875942 本篇文章视频地址(稍后上传) 上一篇文章,我们分享了使用虚拟网桥来连接同网段的不同网络命名空间下的通信情况。 那么,本篇文章, 我们想测试一下&…

用ChatGPT快速阅读论文:3个步骤让你轻松阅读论文文档

引言 您是否曾经因为阅读论文而感到困难和无从下手?ChatDOC是一款专为您设计的人工智能工具,帮助您快速理解论文内容。通过上传文档,利用ChatGPT技术,您只需3个简单步骤,即可快速阅读论文,提高阅读效率。立…

[架构之路-162]-《软考-系统分析师》-3-作系统基本原理-进程管理

目录 前言: 3 . 1 操作系统概述 3.1.1 操作系统的类型 2 . 批处理系统 3 . 分时操作系统 4 . 网络操作系统 5 . 分布式操作系统 6 . 嵌入式操作系统 3.1.2 操作系统的软件结构 1 . 整体结构 2 . 层次结构 3 . 客户/服务器结构 4 . 面向对象结构 3 . 2…

一文总结 Shiro 实战教程

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

InstructGLM:基于ChatGLM-6B在指令数据集上进行微调

InstructGLM 基于ChatGLM-6BLoRA在指令数据集上进行微调 https://github.com/yanqiangmiffy/InstructGLM 本项目主要内容: 🚀 2023/4/9 发布了基于100万条由BELLE项目生成的中文指令数据的Lora权重,具体可见output/belle/chatglm-lora.pt&a…

【Spring Boot】SpringBoot设计了哪些可拓展的机制?

文章目录前言SpringBoot核心源码拓展Initializer拓展监听器ApplicationListenerBeanFactory的后置处理器 & Bean的后置处理器AOP其他的拓展点前言 当我们引入注册中心的依赖,比如nacos的时候,当我们启动springboot,这个服务就会根据配置文…

【UE Sequencer系列】05-解决角色动画造成的位移问题

步骤 在上一篇博客制作的动画中,角色反击的动画部分会造成角色瞬移的问题,如下所示: 为了解决这个问题,我们可以做如下操作: 1.首先我的瞬移现象发生在第698帧到699帧的时候,我对第698帧的角色的transfor…

小朋友台灯什么品牌好?盘点儿童护眼台灯排行榜

小朋友自晚上学习时,有台灯肯定比没有台灯好,只要是合格的、能用的台灯,能有一个稳定又亮堂的环境,也不会给眼睛带来伤害。 这几年在台灯品类中出现“护眼灯”,主打是预防或缓解眼疲劳的,在普通台灯的基础是…

电子模块|外控集成 LED 光源 WS2812模块---硬件介绍

电子模块|外控集成 LED 光源 WS2812模块模块简介模块特点机械尺寸模块简介 WS2812是一个集控制电路与发光电路于一体的智能外控LED光源。其外型与一个5050LED灯珠相同,每个元件即为一个像素点。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路&#xff…

Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的直方图算法增强(C#)

Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的直方图算法增强(C#)Baumer工业相机Baumer工业相机使用图像算法增加图像的技术背景Baumer工业相机通过BGAPI SDK联合OpenCV使用图像增强算法1.引用合适的类文件2.BGAPI SDK在图像回调中…

如何能基于prompt tuning v2训练好一个垂直领域的chatglm-6b

如何能基于prompt tuning v2训练好一个垂直领域的chatglm-6b 首先先抛出一个问题,是不是所有的文本生成数据集都适合用chatglm 6B的模型进行微调。那我们今天找到了三个数据集,分别为百科数据集、法律问答数据集、论文题目与摘要数据集、专利名称与专利…