Go语言Http Server框架实现一个简单的httpServer
作者:upper 发布时间:2024-02-19 11:04:33
标签:Go,Http,Server,框架
实现一个简单地httpServer
上一篇文章对http库的基本使用做了说明,下面来实现一个简单地httpServer
package main
import (
"fmt"
"log"
"net/http"
)
func home(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "这是主页")
}
func user(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "这是用户页面")
}
func main() {
http.HandleFunc("/", home)
http.HandleFunc("/user", user)
log.Fatal(http.ListenAndServe(":8080", nil))
}
此时启动服务并访问8080端口,可以看到下面的页面
但是如果我想同时启动多个server监听不同的端口该怎么办? 我们可以从逻辑上抽象出一个Server,可以表示对某个端口进行监听的实体,这样必要的时候,我们就可以启动多个Server来监听不同的端口
首先我们来写一个接口
type Server interface{
//Route 设定一个路由,命中路由会执行handlerFunc的代码
Route(pattern string handlerFunc http.HandlerFunc)
//Start 用于启动服务
Start(address string) error
}
基于http库实现一个结构体
type sdkHttpSetver struct{
//Name sever的名字,用于标记特定的服务
Name string
}
实现Server接口
func (s *sdkHttpServer) Route(pattern string,handlerFunc http.HandlerFunc){
http.HandleFunc(pattern,handlerFunc)
}
func (s *sdkHttpServer) Start(address string) error{
http.ListenAndServer(address,nil)
}
func NewSdkHttpServer(name string) Server {
return &sdkHttpServer{
Name:name,
}
}
现在我们已经可以同时监听多个端口了
func main(){
server := web.NewSdkHttpServer("my-test-server")
server.Route("/",home)
server.Route("/user",user)
server.Start("8080")
}
虽然我们已经对Server进行了抽象,但是在请求处理的过程中仍然存在问题,就比如我们要实现一个用户注册的接口
所以我们需要继续对Context也就是上下文做一下抽象,这里的Context是我们自定义的Context不是go原生的Context
来源:https://juejin.cn/post/7226632657152032828
0
投稿
猜你喜欢
- 在遥感应用中,我们经常需要对某一景遥感影像中的全部像元的像素值进行平均值求取——这一操作很好实现,基
- python升级到2.7.13函数执行的结尾加上这个即可for x in locals().keys(): del locals
- 实例如下所示:#!/usr/bin/python# -*- coding: UTF-8 -*-import reimport urllib,
- Pycharm是大多数程序员都会使用的一款编程软件,可是对于新手小白对说,英文界面十分头晕。Pycharm最新版本2020.3汉化、解除汉化
- Linux系统自带Python,且根据系统自带资源来对python配置mysql;安装需要已配置好正确的yum源;在python未配置mys
- 下面步骤展示的是如何经过VirtualBox管理器,使得pycharm和ubuntu中的项目环境连接对应起来!如果你有属于自己的服务器,核心
- 这篇论坛文章(赛迪网技术社区)根据网友的个人实践扼要的讲解了将MySQL 5.0下的数据导入到MySQL 3.23中的具体方法及步骤,详细内
- css可以处理16,777,216颜色,可以使用名字、rgb值或十六进制代码。red红色等同于 rgb(255,0,0) &nbs
- 引言RunLoop:又叫运行循环机制,在iOS中的两大机制之一。并不是只有iOS有Runloop其他语言也有,他们的方式不太一样,但是核心都
- 一、单个文件打包1.1 简单打包例如现在有一个main.py文件内容如下import osprint("hello world&q
- 问题tensor详细数值 不能直接print打印:import tensorflow as tfx = tf.constant(1)prin
- 我很想自己写一个这样的程序,不过wordpress是php的,我blog是ASP的,只好用ASP写代码了。经过一番折腾测试,终于让我的梦想变
- 今天在帮前端准备数据的时候,需要把数据格式转成json格式,说实话,涉及到中文有时候真的是很蛋疼,除非对Python的编码规则比较了解,不然
- 这篇文章主要介绍了Python变量作用域LEGB用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 一、策略模式策略模式中,首先定义了一系列不同的算法,并把它们一一封装起来,然后在策略类中,使这些算法可以相互替换。这意味着,让一个类的行为(
- 单神经元引论对于如花,大美,小明三个因素是如何影响小强这个因素的。这里用到的是多元的线性回归,比较基础from numpy import a
- python最值与下标最大值的下标winner = np.argmax(scores)多个最大值的下标(np.argwhere返回数组中非0
- 线性回归是机器学习中的基础算法之一,属于监督学习中的回归问题,算法的关键在于如何最小化代价函数,通常使用梯度下降或者正规方程(最小二乘法),
- 很类似java的properties文件xml文件db_config.ini[baseconf]host=127.0.0.1port=330
- 前言python画图,如果用英文显示基本没有问题,但是中文可能会有乱码或者不显示的情况。经过个人的测试,下图中“横轴&a