GOLANG开发 - Echo 框架 入门

        好久没有更新过了,今年年底特别的忙,不知道为啥,太忙了简直,抽空出来赶紧更新一篇关于golang的文章,本次主将的是即Gin框架和Beego框架之后的有一个框架,叫 Echo框架

        学习过PHP的同学肯定对这个词不陌生,在PHP中,这个是输出数据的一个函数,然而本次讲的Echo和PHP中echo没有半毛钱关系,这是一个Golang的框架,后面我们来仔细讲解一下Echo框架

1.项目初始化:

        和前面几个框架一样,首先需要使用gorm命令初始化项目:go mod init 项目名称


2.安装echo框架:

        命令:go get -u github.com/labstack/echo/v4

3.创建 Echo 项目:

创建并运行文件,看到如图所示案例则表示Echo框架已经安转并运行成功

4.创建路由:

func main() {
    e := echo.New()
    fmt.Println("测试数据")
    e.GET("/index", func(c echo.Context) error {
        return c.String(200, "Hello, World!")
    })
    // 启动服务器
    e.Start(":8080")
}

输出结果:Hello, World!

5.自定义方法:

func main() {e := echo.New()fmt.Println("测试数据")//定义GET方法e.GET("/index", func(c echo.Context) error {return c.String(200, "Hello, World!")})//定义POST方法e.POST("/indexs",indexs)// 启动服务器e.Start(":8080")
}//定义方法
func indexs(c echo.Context) error {id := c.QueryParam("id")return c.String(200, id)
}

6.定义资源路径:

        在页面或者引入资源包的时候需要定义一个资源文件夹,里面存放JS,CSS,图片等一系列的静态资源,那么我们引用的时候需要使用相对路径或者绝对路径,那么我们就需要定义一个路径,来实现引用静态资源:比如  static 目录下的任何文件都会被访问。例如,一个访问 /static/js/main.js 的请求会匹配到 static/js/main.js 这个文件

e.Static("/static", "static")

7.数据绑定:Gin框架中我们介绍过了ShouldBind绑定,在Echo框架中就不能使用了,应该使用Bind来绑定数据到结构体:

//定义结构体 (注意:form 和 query 的值与url里面的值一定保持一致,否则接受不到参数)
type User struct {Name  string `json:"name" xml:"name" form:"name" query:"name"`Sex  string `json:"sex" xml:"sex" form:"sex" query:"sex"`Age int `json:"age" xml:"age" form:"age" query:"age"`
}//数据绑定
e.GET("/users:name:age", func(c echo.Context) error {u := new(User)c.Bind(u)return c.JSON(200, u)
})

启动服务:go run main.go

访问地址:http://localhost:8080/users?name=测试姓名&sex=女&age=28

结果:

8.设置Cookie:

//设置cookie

func writeCookie(c echo.Context) error {cookie := new(http.Cookie) //初始化对象cookie.Name = "mykey"   //设置keycookie.Value = "jay"       //设置valuecookie.Expires = time.Now().Add(24 * time.Hour) //设置过期时间c.SetCookie(cookie)return c.String(http.StatusOK, "write a cookie")
}//获取cookie
func readCookie(c echo.Context) error {cookie, err := c.Cookie("mykey")if err != nil {return err}return c.String(http.StatusOK, "read a cookie")
}

9.模板渲染:与前面的Gin框架和Beego框架不同,没有现成的方法,  所以需要自己定义

1.实现 echo.Renderer 接口
2.注册模版引擎
3.在控制器中渲染模版并返回 HTML 页面

//渲染函数定义
// 第一参数用于保存渲染模版后的结果
// 第二个参数是模版名字
// 第三个参数是传入模版的参数,可以是任意类型
// 第四个参数是echo.Context
Renderer interface {
    Render(io.Writer, string, interface{}, Context) error

import ("html/template""io""log""net/http""github.com/labstack/echo"
)//自定义的模版引擎 struct
type TemplateRenderer struct {templates *template.Template
}// 实现接口,Render函数
func (t *TemplateRenderer) Render(w io.Writer, name string, data interface{}, c echo.Context) error {if viewContext, isMap := data.(map[string]interface{}); isMap {viewContext["reverse"] = c.Echo().Reverse}return t.templates.ExecuteTemplate(w, name, data)
}//主函数
func main() {e := echo.New()renderer := &TemplateRenderer{templates: template.Must(template.ParseGlob("*.html")),}e.Renderer = renderere.GET("/user", func(c echo.Context) error {return c.Render(http.StatusOK, "user.html", map[string]interface{}{"name": "测试yonghu",})}).Name = "foobar"//路由重命名log.Fatal(e.Start(":8000"))
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2811937.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

2步破解官方sublime4

sublime简要破解流程 1.下载sublime官方最新版2. 破解流程 1.下载sublime官方最新版 打开 官方网站下载 portable version 版,省的安装。。解压到任意位置,备份 sublime_text.exe 文件 2. 破解流程 打开网址把文件 sublime_text.exe 拖入网页搜索替换…

Android之UI Automator框架源码分析(第九篇:UiDevice获取UiAutomation对象的过程分析)

前言 通过UiDevice的构造方法,UiDevice对象持有的几个对象一部分是在构造方法中创建的(初始化),它持有的每个对象都是分析的重点 备注:当前对象持有的对象,它的位置一般在实例变量创建时或者构造方法中&…

node14下运行项目报错:regeneratorRuntime is not defined

regeneratorRuntime is not defined,这是由于配置babel出错问题,由于使用了es7语法如async/await而当前babel版本过低 解决: npm install -D babel-plugin-transform-runtime babel-runtime 安装完成后在.babelrc文件下配置: &qu…

矢量图绘制软件:EazyDraw for Mac v11.6.0中文版

EazyDraw是一款功能强大的矢量绘图软件,适用于Mac平台。它提供了直观易用的工具和功能,方便用户进行各种类型的绘图工作,包括插图、图表、技术绘图、流程图、CAD图纸等。 EazyDraw具有丰富的绘图工具,包括线条、多边形、文本、图像…

springboot-基础-eclipse配置+helloword示例

备份笔记。所有代码都是2019年测试通过的,如有问题请自行搜索解决! 目录 配置helloword示例新建项目创建文件 配置 spring boot官方有定制版eclipse,也就是STS,因为不想再装,所以考虑eclipse插件安装jdk和eclipse安装…

人脸2D和3D道具SDK解决方案提供商

人脸识别和增强现实技术成为了许多企业和开发者关注的焦点,为了满足市场对高质量、易于集成的人脸识别SDK的需求,美摄科技推出了一系列领先的人脸2D/3D道具SDK解决方案。 一、产品特点 高精度识别:美摄科技的人脸识别技术采用深度学习算法&…

贝叶斯核机器回归拓展R包:bkmrhat

1.摘要 bkmrhat包是用于扩展bkmr包的贝叶斯核机器回归(Bayesian Kernel Machine Regression, BKMR)分析工具,支持多链推断和诊断。该包利用future, rstan, 和coda包的功能,提供了在贝叶斯半参数广义线性模型下进行identity链接和 …

企业想要高效上云?如何实现?

进入数字化、智能化时代以后,企业数字化转型已成为企业发展的必然趋势。浪潮之中,越来越多的企业开始积极探索上云路径,云上创新已经成为企业加速数字化转型,提升竞争力的必经之路。 赞奇与华为携手共创云桌面SaaS产品—赞奇云工作…

【Flutter/Android】新建项目,打开android 目录,报错红色以及开启 MultiDex 配置

1 报错红色问题。 单独打开 Flutter 项目下的 android 项目即可。 也就是说,你要一部分原生代码开发,你就需要自己把 android 项目单独出去做(其实就相当于android 项目引用 Flutter的dart部分)。也就是说,在 Flutter…

鲲鹏arm64架构下安装KubeSphere

鲲鹏arm64架构下安装KubeSphere 官方参考文档: https://kubesphere.io/zh/docs/quick-start/minimal-kubesphere-on-k8s/ 在Kubernetes基础上最小化安装 KubeSphere 前提条件 官方参考文档: https://kubesphere.io/zh/docs/installing-on-kubernetes/introduction/prerequi…

uniapp的微信小程序授权头像昵称(最新版)

前面我出过两期博客关于小程序授权登录,利用php实现一个简单的小程序授权登录并存储授权用户信息到数据库的完整流程。无奈,小程序官方又整幺蛾子了。wx.getUserInfo接口收回,wx.getUserProfile接口也不让用。导致我的个人小程序:梦缘 的授权…

Unity中URP下实现水体(水面高光)

文章目录 前言一、实现高光反射原理1、原理:2、公式: 二、实现1、定义 _SpecularColor 作为高光反射的颜色2、定义 _SpecularIntensity 作为反射系数,控制高光反射的强度3、定义 _Smoothness 作为高光指数,用于模型高光范围4、模拟…

FL Studio Producer Edition2024中文进阶版Win/Mac

FL Studio Producer Edition,特别是其【中文进阶版 Win/Mac】,是数字音乐制作领域中的一款知名软件。它为广大音乐制作人、声音工程师以及音乐爱好者提供了一个从音乐构思到最终作品发布的完整解决方案。这个版本特别为中文用户优化,并兼容W…

SpringCache缓存专题

SpringCache缓存专题 学习目标 1、理解缓存存在的意义 2、掌握redis与SpringCache的集成方式 3、掌握SpringCache注解的使用 4、掌握项目集成SpringCache流程 第一章 基于SpringCache缓存方案 1.为什么需要缓存 ​ 前台请求,后台先从缓存中取数据&#xff0…

将SU模型导入ARCGIS,并获取高度信息,多面体转SHP文件(ARCMAP)

问题:将Sketchup中导出的su模型,导入arcgis并得到面shp文件,进而获取各建筑的高度、面积等信息。 思路: (1)导入arcgis得到多面体 (2)转为面shp文件 (3)计算高度/面积等 1、【3D Analyst工具】【转换】【由文件转出】【导入3D文件】(在此步骤之间,建议先建立一个…

【Flink精讲】Flink状态及Checkpoint调优

RocksDB大状态调优 RocksDB 是基于 LSM Tree 实现的(类似 HBase) ,写数据都是先缓存到内存中, 所以 RocksDB 的写请求效率比较高。 RocksDB 使用内存结合磁盘的方式来存储数据,每 次获取数据时,先从内存中 …

NVIDIA的RTX 500和1000系列专业Ada世代笔记本GPU,让你随时随地享受AI增强的工作流程

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Python正则表达式:从基础到高级应用的全面总结与实战【第103篇—JSON模块】

Python正则表达式:从基础到高级应用的全面总结与实战 正则表达式是一种强大的文本匹配和处理工具,广泛应用于文本处理、数据抽取、表单验证等领域。本文将从正则表达式的基础知识出发,逐步深入,最终结合代码实战,带你…

提升Vue3应用效率的秘诀:深入比较ref与reactive!

ref 和 reactive 是 Vue3 中实现响应式数据的核心 API。ref 用于包装基本数据类型,而 reactive 用于处理对象和数组。尽管 reactive 似乎更适合处理对象,但 Vue3 官方文档更推荐使用 ref。 我的想法,ref就是比reactive好用,官方也…

Vue笔记(一)

常用指令 1.v-show与v-if底层原理的区别 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>创建一个V…