go学习http和java的简单对比

83 阅读2分钟

1.http服务简单简介

  • http服务是建立在tcp/ip之上的,底层是通过socket实现http协议处理的。

  • 写过java服务端的时候,我们知道通过实现HttpServlet抽象类可以进行业务处理了,然后借助服务器容器tomcat,weblogic等实现服务的,springboot自带有容器jar可以做到命令行启动服务。这些都是借助第三方的jar实现的。

  • go的标准库是自带http服务器实现的,其中定义了接口和启动类的,当然它的功能比不了spring的例如spring对数据库事务的控制、依赖注入IOC和切面AOp这些,理解的时候可以对标HttpServlet。

go的web接口

只要实现了这个接口方法,都可以用来处理请求
type Handler interface {
	ServeHTTP(ResponseWriter, *Request)
}

服务的启动
func ListenAndServe(addr string, handler Handler) error 

2.go中http路由服务快速实现demo

1.直接实现方法
func helloFunc(w http.ResponseWriter, r *http.Request){
    log.Printf("Hello HandleFunc")
    w.Write([]byte(string("Hello HandleFunc")))
}
2.实现接口
type helloHandler struct {
    str string
}

func (th *helloHandler)ServeHTTP(w http.ResponseWriter, r *http.Request){
    log.Printf("Hello Handle")
    w.Write([]byte(string("Hello Handle")))
}

//处理路由映射
http.Handle("/helloHandler", &helloHandler{"Hi"})
http.HandleFunc("/hellwFunc", helloFunc) 
http.ListenAndServe("127.0.0.1:8088",nil)}

上面介绍的这些基础都是需要我们了解的,当然在项目开发中我们用到的都是经过封装易于开发的框架。

java实现一个简单web工具
  • 实现过程大概是提取注解路由,当然当时也没实现通配符,占位符这种
  • 映射路由和处理方法映射,当调用的时候会用到一些反射和简单IOC的一些东西
  • 数据库事务控制是通过代理实现的。
  • 工具加载控制入口是通过指定的filter实现的
  • 扩展没实现
7天用Go从零实现Web框架Gee教程
  • 先实现了路由的控制,通过字典树实现的并且还简单实现了占位符和通配符
  • 也是映射路径和处理函数
  • 实现了中间件的扩展,里面是通过一个数组进行链式调用的
  • 模板都是有实现的,这里简单的说下静态的资源文件例如js,css浏览器会主动请求加载的(servlet实现的有,go需要路径特殊处理
  • 错误恢复,这里面是go和java是有区别的,java就是异常捕获处理,go不处理是宕机的
  • java在处理前会有个过滤器,这里暂且还没看到
  • 数据库管理没实现
  • 依赖注入这里暂且也没看到,因为学go时间不久还需要后续了解
学到的点
  • 路由控制
  • 中间件扩展

欢迎关注公众号:冒泡的肥皂

image.png