首页 > 其他分享 >Mygin 实现简单Http

Mygin 实现简单Http

时间:2024-01-16 16:55:06浏览次数:29  
标签:Http world Mygin ListenAndServe func 简单 Handler http hello

本篇是完全参考gin的功能,自己手动实现一个类似的功能,帮助自己理解和学习gin框架

目的

  • 简单介绍net/http库以及http.Handler接口
  • 实现简单的功能

标准库启动Web服务

import "net/http"

func helloHandler(w http.ResponseWriter, r *http.Request) {
	w.Write([]byte("hello world"))
}
func main() {
	http.HandleFunc("/hello", helloHandler)
	http.ListenAndServe(":8088", nil)
}
设置了一个 /hello 路由,请求返回 hello world。
~ curl 127.0.0.1:8088/hello
hello world
http.ListenAndServe源码查看
// ListenAndServe监听TCP网络地址addr,然后调用
//使用处理程序处理传入连接的请求。
//被接受的连接被配置为使能TCP keepalive。
//
//处理程序通常为nil,在这种情况下使用DefaultServeMux。
//
// ListenAndServe总是返回一个非nil错误。
func ListenAndServe(addr string, handler Handler) error {
	server := &Server{Addr: addr, Handler: handler}
	return server.ListenAndServe()
}

实现http.Handler接口

  • http.HandleFunc的第二个参数是什么意思,点进官方包看是什么
package http

type Handler interface {
    ServeHTTP(w ResponseWriter, r *Request)
}

第二个参数是要实现 Handler 接口的方法,根据路由匹配交给实现对应的方法处理。

基于此对方法改造封装mygin.go
package mygin

import (
	"net/http"
)

type Engine struct {
}

func (e *Engine) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	switch r.URL.Path {
	case "/":
		w.Write([]byte("success \n"))
	case "/hello":
		w.Write([]byte("hello world! \n"))
	default:
		w.Write([]byte("404 NOT FOUND" + r.URL.Path + " \n"))
	}
}

func Default() *Engine {
	return &Engine{}
}

func (e *Engine) Run(addr string) {
	err := http.ListenAndServe(addr, e)
	if err != nil {
		return
	}
}
调用main.go
package main

import "gophp/mygin"

func main() {
	engine := mygin.Default()
	engine.Run(":8088")
}
curl请求
 ~ curl 127.0.0.1:8088/hello
hello world!
 ~ curl 127.0.0.1:8088
success

标签:Http,world,Mygin,ListenAndServe,func,简单,Handler,http,hello
From: https://www.cnblogs.com/pengb/p/17967495

相关文章

  • redis 发布订阅 的简单用法
    背景目前所使用的爬虫管理平台在自动获取git代码时会有拉不下来代码的情况,导致服务器上运行的不是最新的代码解决方案代码合并到master分支上之后,通过webhook触发消息发布接口,服务器在收到监听到消息开始从git的master分支上拉去代码因为拉取的代码存放在宿主机中,dock......
  • 处理HTTP请求中的表单数据
    处理HTTP请求中的表单数据是Web开发中常见的任务。在Go语言中,可以使用net/http包来解析HTTP请求中的表单数据。首先,确保你已经创建了一个HTTP服务器,并且能够接收和处理POST请求。然后,你可以使用r.ParseForm()函数来解析请求中的表单数据。以下是一个简单的示例,演示了如何处理HTTP请......
  • 解决 Idea HttpClient 无法读取 http-client.env.json 配置的问题
    前言byd就我遇到了这种情况是吧,百度搜的全是nm复制粘贴的垃圾文章步骤创建一个.http文件,使用idea工具栏创建一个env.json,内容无所谓按理说现在应该就能正常使用了,但是如果到这一步还没法读取到这个环境的话,继续向下看右键env.json看看有没有这个,如果没......
  • 简单再回顾一下前后端分离的历程,以及他的优点(有的内容是粘贴的别人的,我只用来自己学习
    我的大作业要用到python写后端代码,但是python写前端页面太够吧丑了,所以还是得学习学习Vue,在系统学习vue之前,我先回顾回顾之前学习过一小段时间的vue,以及了解一下前后端分离的好处在5年前,前后端还是几乎是不分离的,web开发中的代码尤其混杂,PHP中有JS,JSP中有JS,ASP中有JS,JS......
  • nodeJS搭建简单socket测试
    背景:有个小伙伴使用vue连不上公司的socket,但又要想做连接测试。网上搜索,安装node环境,其实就是下载个安装包:https://nodejs.org/en/download,安装成功后,配置一下环境变量,配置后win+R,输入cmd打开命令框,输入node-v,可以正常输出node的版本号,说明node安装完成。然后就是如何创建一个n......
  • HttpRunner使用教程?
    什么是HttpRunner?      它是一种面向http协议的测试框架,它只需要去维护一份yaml/json文件就可以使用自动化测试,结合locus性能测试,线上性能监控,持续集成等多种需求工作原理:      通过抓包工具Charles/Fiddler生成HAR文件=>然后再转化为yaml或者json文件,再解析成......
  • csharp c# http request get post put delete header respons json 网络请求
    C#中如何模拟一个post请求使用HttpClient代替。以下是修改后的代码示例:usingSystem;usingSystem.Net.Http;usingSystem.Text.Json;classHttpPostExample{privateasyncTask<string>HttpPost(stringUrl,objectpostData){stringpostDataStr=J......
  • 还不敢写多线程程序?看看Go如何让并发控制简单有趣
    还不敢写多线程程序?看看Go如何让并发控制简单有趣原创 萤火架构 萤火架构 2024-01-1219:50 发表于北京 听全文所谓并发控制,就是同一程序进程内不同线程间访问相同资源时的冲突处理,有时也称为进程内同步。比如一个简单的内存累加计数操作,如果不进行同步,不同的线程可......
  • 简单的链式存储节点
    本文简述了两个实现了链式存储的节点类。第一个是单向链表的节点类Node<>,支持泛型支持访问后续节点实现如下,template<class_T>structNode{_Titem;Node*next=nullptr;};第二个是双向链表的节点类Biway_Node<>,支持泛......
  • Day50 简单小结:类与对象
    简单小结:类与对象1.类与对象类是一个模板:抽象对象是一个具体的实例2.方法定义,调用!3.对象的引用引用类型:基本类型(8)对象是通过引用来操作的:栈---->堆4.属性:字段Filed成员变量默认初始化:数字:00.0c......