前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go Echo Web Framework

Go Echo Web Framework

作者头像
icepy
发布2019-06-24 18:02:56
1.6K0
发布2019-06-24 18:02:56
举报
文章被收录于专栏:子曰五溪子曰五溪

Echo是Go语言生态里的一个Web应用框架,这个框架提供了非常非常简单的方式来开发高性能的Web应用。其实在写Echo之前,还想说一说Go语言里一个非常有意思的东西,叫Reflect(反射)的特性,这个特性在动态语言中非常有用,可以类比Objective-C中提供的runtime机制,用来动态的执行Method或者设置属性,而且reflect的使用非常的简单。reflect.TypeOf和reflect.ValueOf来分别表示一个值的类型和一个类型的值,并且通过这样的方式来动态的调用某些方法和设置属性。

代码语言:javascript
复制
type NotknownType struct {
   s1, s2, s3 string
}

func (n NotknownType) String() string {	
    return n.s1 + " - " + n.s2 + " - " + n.s3
}

func main(){        
    var secret interface{} = NotknownType{"ada", "go", "obrer"}        
    value := reflect.ValueOf(secret)
   fmt.Println(value)	
    knd := value.Kind()
   fmt.Println(knd)	
    for i := 0; i < value.NumField(); i++ {
fmt.Println("Field %d: %v\n", i, value.Field(i))
   }	
    results := value.Method(0).Call(nil)
   fmt.Println(results)
}

如果使用ValueOf那么可以用Kind方法来获取类型,并且设置值用Field,调用方法用Method,这都非常的方便。

好了,言归正传,我们来看一看Echo Web Framework,这个用来开发Web应用的框架,到底如何。如果你接触过Express或者Koa,应该了解整套中间件的机制,而Echo Web Framework正好也提供了这样的一套机制,在形式上(抛开语法不谈)Koa的开发者能很顺利的切换到Echo上。

  • 优化的 HTTP 路由。
  • 创建可靠并可伸缩的RESTful API。
  • 行于标准的HTTP服务器或FastHTTP服务器。
  • 组 APIs.
  • 可扩展的middleware框架。
  • Define middleware at root, group or route level.
  • 为JSON, XML进行数据绑定,产生负荷。
  • 提供便捷的方法来发送各种HTTP相应。
  • 对HTTP错误进行集中处理。
  • Template rendering with any template engine.
  • 定义属于你的日志格式。
  • 高度个性化。

上述的List是通过官网文档翻译而来,你可以看到Echo Web Framework提供了什么样的功能。

(准备好访问外国网站的工具),使用go get github/labstack/echo 命令来安装echo框架,你可以在~/go/pkg/darwin_amd64/** 目录中查看到已经安装好的echo,这里的目录结构,可能在不同的机器中不一样。(我的是Mac)

代码语言:javascript
复制
// main.go
package main

import (	
    "net/http"    
    "github.com/labstack/echo"    
    "github.com/labstack/echo/engine/standard"
)
    
func main() {	
    e := echo.New()
   e.GET("/", func(c echo.Context) error {		
        return c.String(http.StatusOK, "Hello, World!")
   })
   e.Run(standard.New(":1323"))
}

运行 go run main.go,这是你就能通过http://127.0.0.1:1323来访问页面。这是一个很简单的Hello World的例子,但是从这个例子中,可以很直观的感受到,定义路由,启动方法,几乎都是类似的。如果你用了Koa,其实也是这样来定义路由,在Echo中也可以支持动态路由的配置,如e.GET("/i/:id", func( c echo.Context) error { // do }) ,至于其他的一些方式,可能感觉比Koa封装的更方便,如果你要获取GET的参数,可以使用c.QueryParam。如果你要获取表单参数,可以使用c.FormValue。如果你要获取multipart/form-data类型的数据(一般文件上传),可以使用c.FormFile。至于处理请求,就更方便了,直接在struct里使用bind data的特性来完成就好,返回的类型,也有很方便的方法给你使用,如:c.JSON,c.XML等。Context机制,几乎是所有Web框架的一大特点,一个Context描述了一个请求的生命周期,从request到response一个完整的链条,很明显的出现在你的视野中。几乎跟HTTP有关的内容,都可以在Context中找到对于的方法来解析对于的内容。

Echo也提供了和Koa一样的中间件流程,几乎注册的方法都一样(关于中间件概念,如果不清楚,那就要好好去看一下了)。

代码语言:javascript
复制
package main

import (	
    "fmt"    
    "io"    
    "os"    
    "net/http"    
    "github.com/labstack/echo"    
    "github.com/labstack/echo/middleware"
)
func main() {	
    e := echo.New()
   e.Use(middleware.Logger())
   e.Use(middleware.Recover())
   e.Static("/", "public")
   e.POST("/upload", upload)
   e.Logger.Fatal(e.Start(":1323"))
}

这个例子是一个很简单的处理上传文件的服务,提供了日志打印的功能,使用.Use来注册中间件。剩下的,很多都是业务开发了,不过在此之外,还有一些东西还需要完善,毕竟做开发嘛,能用工具解决的问题,提升的效率,尽量使用 shell ci 等方式来解决,如:开发阶段能每次编写完代码,编辑器save的时候能自动重启,git push时能自动重新部署等等,这些对于整个开发的生命周期内效率的提升,还是帮助蛮大的,还有一个就是调试。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 子曰五溪 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档