使用go自带的http包搭建一个的web服务器

摘要:
如何接收客户端请求?这就是构建一个简单的web服务器的基本逻辑接下来其实可以上手beego框架了先放一下beego框架的流程图

先放代码

package main

import (
	"fmt"
	"log"
	"net/http"
	"strings"
)

func sayhelloName(w http.ResponseWriter, r *http.Request) {
	r.ParseForm()
	fmt.Println(r.Form)
	fmt.Println("path", r.URL.Path)
	fmt.Println("scheme", r.URL.Scheme)
	fmt.Println(r.Form["url_long"])
	for k, v := range r.Form {
		fmt.Println("key:", k)
		fmt.Println("val:", strings.Join(v, ""))
	}
	fmt.Fprintf(w, "Hello	abs!")
}

func sayno(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "no hello")
}

func main() {
	http.HandleFunc("/", sayhelloName) //设置访问路由
	//创建监听端口
	http.HandleFunc("/no", sayno) //设置访问路由
	err := http.ListenAndServe(":9090", nil)
	if err != nil {
		log.Fatal("ListenAndServe:	", err)
	}
}

然后使用go run XXX.go运行这段代码
我们访问localhost:9090就可以看到我们创建的服务了
这段代码很简单,他的一个流程是

  1. 创建Listen Socket,监听某个端口
  2. ListenSocket接收服务器请求,得到client socket,然后使用clientsocket和客户进行通信
  3. 处理客户端的请求, 首先从Client Socket读取HTTP请求的协议头, 如果是POST 方法, 还可能要读取客户端提交的数据, 然后交给相应的handler处理请求, handler处理完毕准备好客户端需要的数据, 通过Client Socket写给客户端。

那么问题来了

  • 如何监听端口?
  • 如何接收客户端请求?
  • 如何分配handler?
    从之前的代码可以看到,go是使用一个函数http.ListenAndServe处理这些事情的
    然后使用HandleFunc分配处理函数。

这就是构建一个简单的web服务器的基本逻辑

接下来其实可以上手beego框架了
先放一下beego框架的流程图
在这里插入图片描述

免责声明:文章转载自《使用go自带的http包搭建一个的web服务器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇React Swiper轮播图(二)支付宝支付成功后通知在微信打开的提示页面下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

OSSEC初探

OSSEC的初始概念:OSSEC是一个开源的基于主机的入侵检测系统,可以执行日志分析、完整性检查、windows注册表监视、隐藏检测和实时报警。简单地说,OSSEC在C/S模式下工作。代理监视和收集信息并将其报告给服务器。服务器分析并预处理信息,并通过电子邮件将系统更改发送给管理员。...

lstm与bilstm

背景学习和整理lstm和bilstm的理论知识。对于有序数据,bilstm具有数据信息的长、短存储功能。bilstm:它是前lstm和后lstm的组合。为什么需要lstm?它可以更好地捕捉远距离的依赖性。通过培训,你可以了解哪些信息需要记住,哪些信息需要忘记;我不认为他喜欢“否定”,即句子的情感分析是贬义的。“lstm建模有一个问题,它不能从后面到前面对信息...

使用jsPlumb插件实现动态连线功能

jsPlumb是一个强大的JavaScript连线库,它可以将html中的元素用箭头、曲线、直线等连接起来,适用于开发Web上的图表、建模工具等,其实jsPlumb可能主要是用来做流程图的,它在实现这方面的功能上非常强大,我在项目中只使用了它少部分功能,来实现项目中连线的效果。...

差分方程的零输入响应与零状态响应

差分方程的迭代分析方法有以下缺点:没有闭合解,不利于数学分析。某个时间的输出只能从头开始计算。本文介绍了差分方程的零输入响应和零状态响应分析方法。对于系统,这种分析方法可以很好地表达系统响应的物理意义=Y[-1]=0$Input Y[n]。回顾零输入响应和零状态响应的迭代计算,我们发现以下规则:$egin{align*}y[0]&=-&qqu...

C# Task详解

1.任务线程池的优点与线程相比有很多优点,但线程池不方便使用。例如:◆ ThreadPool不支持线程取消、完成和失败通知等交互操作;◆ ThreadPool不支持线程执行顺序;在过去,如果开发人员想要实现上述功能,他们需要完成大量额外的工作。现在,FCL提供了一个更强大的概念:任务。任务基于线程池执行...

【转载】 银河麒麟V10系统安装U盘制作

在制作U盘安装盘的过程中,Kylin系统的ISO映像文件比较大,因此很耗时。创建完成后,“写入硬盘映像”对话框将自动关闭。...