echo web框架教程

2023-05-16

转载:https://www.cnblogs.com/remixnameless/p/14318145.html

一、介绍

echo web框架是go语言开发的一种高性能,可扩展,轻量级的web框架。
echo框架真的非常的简单,几行代码就可以启动一个高性能的http服务端。

如果你只是测试返回hello world这种简单逻辑,普通的低配服务器,每秒扛个万八千QPS没什么问题,这个主要跟服务器配置有关,当然实际应用中的业务逻辑不会是hello world那么简单,业务不同,系统设计不同吞吐量肯定不一样。

echo框架默认其实只包含了MVC框架的C部分,就是负责url路由和控制器部分。至于V视图部分和M数据操作部分可以随意使用自己喜欢的工具库来操作。

二、安装

安装echo包

go


go get github.com/labstack/echo/
  

三、如何开始一个Http Server。

创建httpserver.go文件,代码如下:

go


package main

import (
	"net/http"
	//导入echo包
	"github.com/labstack/echo"
)

func main() {
    //实例化echo对象。
	e := echo.New()
	
	//注册一个Get请求, 路由地址为: /hello  并且绑定一个控制器函数, 这里使用的是闭包函数。 
	e.GET("/hello", func(c echo.Context) error {
	    //控制器函数直接返回一个字符串,http响应状态为http.StatusOK,就是200状态。
		return c.String(http.StatusOK, "hello echo")
	})
	
	//启动http server, 并监听8080端口,冒号(:)前面为空的意思就是绑定网卡所有Ip地址,本机支持的所有ip地址都可以访问。
    e.Start(":8080")
}
  

运行http server

go


$ go run httpserver.go
  

通过浏览器访问 http://localhost:8080/hello 浏览器会显示: hello echo

echo web框架的代码非常简洁,就几行代码一个http server的主要的初始化工作就搞定了,只要添加自己的业务代码就行。

四、项目结构

通过上面的例子,知道echo大致是怎么使用的,但是实际项目业务功能会很多,不可能把所有代码都写在一个go文件里面或者写在一个main入口函数里面;需要对项目结构做一些规划,方便维护代码以及扩展。

echo web框没有对项目结构做出限制,根据自己项目需要自行设计。

这里给出一个典型的MVC框架大致的项目结构的例子,参考如下:

shell


├── conf                    #项目配置文件目录
│   └── config.toml         #可以选择自己熟悉的配置文件管理工具包例如:toml、xml等等
├── controllers             #控制器目录,按模块存放控制器,必要的时候可以继续划分子目录。
│   ├── food.go
│   └── user.go
├── main.go                 #项目入口,这里负责echo框架的初始化,注册路由信息,关联控制器函数等。
├── models                  #模型目录,负责项目的数据存储部分,例如各个模块的Mysql表的读写模型。
│   ├── food.go
│   └── user.go
├── static                  #静态资源目录,包括Js,css,jpg等等,可以通过echo框架配置,直接让用户访问。
│   ├── css
│   ├── images
│   └── js
├── logs                    #日志文件目录,主要保存项目运行过程中产生的日志。
└── views                   #视图模板目录,存放各个模块的视图模板,当然有些项目只有api,是不需要视图部分,可以忽略这个目录
    └── index.html
  

提示:上面给出的项目结构,程序编译打包后代码都编译成一个可执行程序,需要把conf,static, logs目录一起打包部署,否则程序会找不到配置文件,静态文件,日志存储目录,后面会有专门的教程介绍go项目的打包。

五、路由&控制器

1.路由

echo框架的路由定义如下:

go


//定义post请求, url为:/users, 绑定saveUser控制器函数
e.POST("/users", saveUser)

//定义get请求,url模式为:/users/:id  (:id是参数,例如: /users/10, 会匹配这个url模式),绑定getUser控制器函数
e.GET("/users/:id", getUser)

//定义put请求
e.PUT("/users/:id", updateUser)

//定义delete请求go
e.DELETE("/users/:id", deleteUser)
  

2.控制器

在echo框架中,控制器是一个函数,需要根据业务实现各种控制器函数,控制器函数定义如下:

go


//控制器函数只接受一个echo.Context上下文参数
//参数:c 是上下文参数,关联了当前请求和响应,通过c参数可以获取请求参数,向客户端响应结果。
func HandlerFunc(c echo.Context) error
  

例子:

go


// 路由定义:e.GET("/users/:id", getUser)
// getUser控制器函数实现
func getUser(c echo.Context) error {
  	// 获取url上的path参数,url模式里面定义了参数:id
  	id := c.Param("id")
  	
  	//响应一个字符串,这里直接把id以字符串的形式返回给客户端。
	return c.String(http.StatusOK, id)
}
  

六、echo如何获取请求参数

控制获取请求参数的例子:

go


func getUser(c echo.Context) error {
  	// 方式1:获取url上的path参数,url模式里面定义了参数:id
  	id := c.Param("id")
  	
  	//方式2:获取query参数,例如:/users?username=tizi365&type=2
  	username := c.QueryParam("username")  //值为:"tizi365"
  	usertype := c.QueryParam("type")      //值为:"2"
  	
  	//方式3:获取post请求的表单参数
  	username := c.FormValue("username") 
  	usertype := c.FormValue("type") 
  	
  	return c.String(http.StatusOK, "获取参数例子")
}
  

七、响应请求

echo框架支持以文本、html、Json、xml多种格式的内容形式响应Http请求。

控制器响应请求的例子:

go


type User struct {
    Id       int
    Username string
}

func getUser(c echo.Context) error {
    //方式1: 返回字符串
  	//以字符串的形式返回,c.String语法:c.String(http状态码,"字符串内容")
  	return c.String(http.StatusOK, "获取参数例子")
  	
  	//方式2:返回JSON
  	//以json字符串的形式返回结果,c.JSON语法: c.JSON(http状态码, 结构体变量)
  	u := User{2, "tizi365"}
  	return c.JSON(http.StatusOK, u) //返回结果:{"id":2,"username":"tizi365"}

    //方式3: 返回HTML
    //以网页形式返回html代码,c.HTML语法: c.HTML(http状态码, "html内容")
    html := "<html><head><title>tizi365.com</title></head><body>欢迎访问tizi365.com</body></html>"
    //当然实际项目,不会这样拼写html代码,太麻烦,一会使用模板引擎处理Html代码,然后把结果通过c.HTML返回给客户端就行。
    return c.HTML(http.StatusOK, html)

}
  

八、如何展示静态内容

对于js、css、png、jpg这些静态内容,echo框架通过一个配置就可以实现静态资源的展示。

例子:

go


e := echo.New()

...忽略其他初始化代码...

//设置静态资源url前缀和目录
//这里设置 /static 为静态资源url的前缀,当前程序运行目录下面的static目录为静态资源目录
e.Static("/static", "static")

//例如:static目录下存在js/index.js文件, 则这个js的url为:/static/js/index.js  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

echo web框架教程 的相关文章

  • php 和 html 文件扩展名有什么区别?

    我有一个 php文件包含以下代码 当我将文件的扩展名更改为 html那么它也以同样的方式表现 任何人都可以解释以下内容 为什么文件的行为方式与两个文件的行为方式相同 扩展 两者有什么区别 php and html文件扩展名 php file
  • 允许获取请求但仅在我的域中?

    在我的网站上 我可以使用 GET 请求触发某些操作 例如隐藏或删除评论的功能 我不是很担心 但如果有人使用 img src url 设计攻击来删除评论或电子邮件 那会很烦人 有办法防止这种情况吗 我使用 httponlycookies 作为
  • VM1550 installHook.js:1860 在控制台中记录为双行

    我正在使用反应应用程序并构建一个简单的应用程序 当我使用 console log 方法在控制台上记录某些内容时 控制台上会出现第二条日志 它似乎来自第 1860 行的文件名 installHook js 我已经尝试过寻找它 但我没有找到 我
  • 构建网站翻译文件

    我在建立网站时多次遇到这个问题 我将以使用 PHP 和 Laravel 为例进行解释 但这个问题在多个平台中都很常见 这已经在几个问题中得到了解决 post1 https stackoverflow com questions 317854
  • PHP echo 与 PHP 短 echo 标签

    它们的安全性相同吗 我被告知使用 或者 当在 JavaScript 内回显数据时 它必须是 JavaScript 编码的
  • 最长和最短的 HTML 字符实体名称是什么? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 管子周围有
  • WebUSB 和 RFID 读取器

    我想知道是否有人有让 RFID 读取器通过 WebUSB 工作的经验 我使用的阅读器是https www parallax com product 28340 https www parallax com product 28340 根据我
  • Jekyll 在子网站上生成静态网站?

    是否可以将 Jekyll 放在 GitHub 上托管的网站的单个部分上 即是否可以让 example github io 成为常规站点 而 example github io blog 由 Jekyll 静态生成 我相信可以通过创建另一个名
  • 我应该将标签存储在文本字段还是单独的表中?

    我有一个表 其中的行如下所示 id path tags 1 pictures pic1 jpg car bmw 3 pictures pic2 jpg cat animal pussy 4 pictures pic3 png gun 基本上
  • Phonegap - cordova 在 Android 和 iOS 设备上延迟且缓慢

    我刚刚开始使用 zend studio 开始我的第一个 PhoneGap 项目 但是 在我构建并部署它之后 该应用程序非常慢 Android 和 iOS 均可 滚动滞后 如果我按下按钮 转到下一页的速度很慢 有什么办法可以提高它的性能吗 提
  • 如何保护我的网站免遭 HTTrack 或其他软件的翻录?

    我最近获得了批准的网站模板主题森林 http themeforest net 我的网站流量过多 并注意到我在 Themeforest 上的演示被 HTTrack 等某些软件破坏 如果这种情况持续下去 该产品的销量最终可能会下降 那么 有什么
  • 为什么要使用除 div 以外的任何东西? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • VSTS 构建失败/发布无法在 bin 文件夹中找到 roslyn\csc.exe

    我们有一个网站项目 安装了以下 nuget 软件包 Microsoft CodeDom Providers DotNetCompilerPlatform 1 0 8 Microsoft Net Compilers 2 4 0 The web
  • 自动输入以在 Dockerfile 中对脚本进行多项选择

    我有一个像blow这样的shell脚本 我想在a中执行它Dockerfle并使用自动选择echo e 1 Which application you d select 1 nginx 2 squid 3 hproxy Please ente
  • Firebase Auth - 最近登录多长时间

    我有一个个人资料选项卡 用户可以在其中按编辑并编辑他们的个人资料 我只想在必要时才需要他们的密码 所以想知道用户登录的时间是多少毫秒 这使得它不是最近登录 其中firebase会抛出错误 auth requires recent login
  • Chrome:网络元素自动移动

    我正在开发一个网络项目 在过去的两周里 我正在进行学期考试 所以我要休息一下 现在 既然他们已经结束了 我又继续我的工作了 但我发现我的一些Web 元素 如按钮 span 在 Chrome 上移动了一些像素 在 IE 和 Mozilla 上
  • IIS 8 HTTPS/需要 SSL 导致超时错误

    尝试通过 IIS 8 通过 SSL 发布网站 但出现超时错误 任何帮助表示赞赏 采取的步骤 已验证该网站可以通过 HTTP 访问 http xxx xxx xxx xxx有效 此时使用 IP 地址 如果重要的话 IIS gt 服务器证书 g
  • powershell Invoke-WebRequest WebSession 不起作用

    我无法让以下代码工作 它似乎已登录 但随后返回带有 response 的登录页面 我猜这与回发有关 有办法解决这个问题吗 谢谢 login Invoke WebRequest Uri http www sqlpass org UserLog
  • 简单的 PHP 回显代码不起作用

    这是我的 html 和 php 脚本 h1 Bob s Auto Parts h1 table width 100 tr tr table 为什么这个输出会出现一个 gt 我希望它是 这有效 仅有的 这是输出 鲍勃的汽车零件 鲍勃
  • 在 PHP 中从 URL 斜杠后获取两个单词

    我需要从 URL 中获取两个单词 例如我有以下 URL http mydomain com alrajhi invoice 108678645541 http mydomain com alrajhi invoice 10867864554

随机推荐

  • 浏览器多标签,Http协议和底层socket的情况

    2个浏览器标签同时访问同1个url xff08 即相同ip xff09 xff0c 来get数据 xff0c 判断http的chunked数据包会不会交叉 1 发现chrome是2个标签使用同一个链接 但是第2个get是在第一个get数据收
  • 端口状态 LISTENING、ESTABLISHED、TIME_WAIT及CLOSE_WAIT详解,以及三次握手,滑动窗口

    本文根据众多互联网博客内容整理后形成 xff0c 引用内容的版权归原始作者所有 xff0c 仅限于学习研究使用 网上查了一下端口状态的资料 xff0c 我下面总结了一下 xff0c 自己学习学习 xff1a TCP状态转移要点 TCP协议规
  • http协议以及chunked编码分析

    Http协议 Http协议 格式 HTTP消息包括浏览器向服务器的请求消息和服务器向浏览器的响应消息 这两种类型的消息都由一个起始行 xff0c 一个或者多个头域 xff0c 一个头域结束的空行和可选的消息体组成 HTTP头域一般包括通用头
  • http-parser解析http报文详解

    说明 项目里用到力http parser xff0c 在这里简单说明一下其用法吧 下载地址 xff1a https github com joyent http parser 其使用说明很详细 开源用例 开源tcpflow 1 4 4中使用
  • nginx的部分内置变量介绍

    项目组接触了nginx内置变量 xff0c 网上查了查 xff0c 自己也注释一下 变量名 变量含义 arg NAME GET请求中NAME的值 即 后面的arg name 61 arg value形式的arg name args 请求中的
  • ngx_lua常用变量参数

    最近项目接触了Nginx的lua使用 xff0c 网上查了查资料 xff0c 这里记录一下 Nginx与Lua编写脚本的基本构建块是指令 指令用于指定何时运行用户Lua代码以及如何使用结果 下面是显示指令执行顺序的图 Nginx Lua模块
  • *** buffer overflow detected ***

    gcc正常编译运行正常 xff0c 加了 O就报这个 最后检查出来是sprintf buf小了
  • nginx虚拟路径中proxy_pass对后端请求的影响

    假设nginx中的配置是这样的 xff1a server listen 80 server name x x x x location subdir proxy pass http y y y y 那么 xff0c 当用户请求http x
  • Nginx 介绍,以及Nginx配置指令执行的顺序 11 个阶段

    一 Nginx介绍 Nginx的产生 没有听过Nginx xff1f 那么一定听过它的 34 同行 34 Apache吧 xff01 Nginx同Apache一样都是一种WEB服务器 基于REST架构风格 xff0c 以统一资源描述符 Un
  • Nginx根据Status保存日志,及ngx_http_log_module 模块介绍

    前言 Nginx日志对于统计 系统服务排错很有用 Nginx日志主要分为两种 xff1a access log 访问日志 和error log 错误日志 通过访问日志我们可以得到用户的IP地址 浏览器的信息 xff0c 请求的处理时间等信息
  • Nginx: Connection reset by peer 错误定位

    最近Nginx反向代理遇到了 104 Connection reset by peer 错误 xff0c google了一下 xff0c 这里记录一下 本文根据众多互联网博客内容整理后形成 xff0c 引用内容的版权归原始作者所有 xff0
  • 企业各职位英文缩写 PM,TM,PL,TL,SE,PG,CEO,CFO

    企业各职位英文缩写 xff1a GM General Manager 总经理 VP Vice President 副总裁 FVP First Vice President 第一副总裁 AVP Assistant Vice President
  • go mod常用命令 以及 常见问题

    最近接触到go mod xff0c 网上查了查资料 xff0c 这里记录一下 1 介绍 1 1 go mod是什么 go mod 是Golang 1 11 版本引入的官方包 xff08 package xff09 依赖管理工具 xff0c
  • 什么是CURL,PHP与CURL

    一 什么是CURL curl是一个利用URL语法在命令行方式下工作的文件传输工具 curl是一个利用URL语法在命令行方式下工作的文件传输工具 它支持很多协议 xff1a FTP FTPS HTTP HTTPS GOPHER TELNET
  • 大端小端字节序,网络字节序,Intel字节序

    一 字节序 计算机硬件存储数据有两种方式 xff1a 大端字节序 xff08 big endian xff09 和小端字节序 xff08 little endian xff09 小端字节序 xff1a 即低地址存低位字节 xff0c 或者说
  • 基于C++的Qt(三)Qt类库概述

    Qt是一个用标准C 43 43 编写的跨平台开发类库 xff0c 它对标准C 43 43 进行了扩展 xff0c 引入了元对象系统 信号与槽 属性等特性 xff0c 使应用程序的开发变得更高效 Qt类库中大量的类以模块形式分类组织的 xff
  • 【ROS2】一、创建工作空间和功能包

    文章目录 前言一 创建工作空间二 创建功能包三 编译功能包总结 前言 ROS2通过命令创建工作空间和功能包 xff0c vscode对ROS2的支持比ROS1少 xff0c 不能直接在vscode中创建功能包 xff0c 因此 xff0c
  • debian 更换源 使用国内源 配置方法

    配置前请先参考 xff1a https wiki debian org SourcesList https www debian org mirror list https mirrors tuna tsinghua edu cn help
  • i.MX6ULL 开发板-Mqtt 移植

    转载 xff1a http e betheme net article show 149636 html action 61 onClick PS xff1a 订阅主题 xff0c 命令如下 xff1a mosquitto sub h lo
  • echo web框架教程

    转载 xff1a https www cnblogs com remixnameless p 14318145 html 一 介绍 echo web框架是go语言开发的一种高性能 xff0c 可扩展 xff0c 轻量级的web框架 echo