Echo 系列教程——定制篇6:自定义 Server 相关,替换或扩展默认的 Server

这是定制篇的最后一节,讲解 Server 的自定义。 默认 Server 通常情况下,Echo 通过如下方式启动一个 HTTP Server: e := echo.New() e.GET("/", func(c echo.Context) error { return c.String(http.StatusOK, "Hello, World!") }) e.Logger.Fatal(e.Start(":2020")) 我们打开源码一探究竟: // Start starts an HTTP server. func (e *Echo) Start(address string) error { e.Server.Addr = address return e.StartServer(e.Server) } 原来调用的是 StartServer,参数是默认的 Server 实例,它是一个 http.Server 的指针类型。 自定义 Server 知道了 Echo#Start 最终调用的是 Echo#StartServer,而且它的参数是一个 *http.Server 类型,所以自

Echo 系列教程——定制篇3:自定义 Logger,用你喜欢的日志库

在知识星球简书项目中,我们分析对比了目前的一些日志库。虽然 Go 标准库有一个 log,但功能有限,所以才出现了很多第三方的日志库。在 用 Go 实现一个简书 8:日志记录和优秀库的学习 中,我们得出结论,推荐大家使用 zerolog 。现在我们就将 zerolog 集成进 Echo 框架中。 Echo 默认的 Logger Echo 日志记录的默认格式是 JSON,可以通过修改标头来更改,即 Echo#Logger.SetHeader(io.Write

Echo 系列教程——定制篇2:自定义 Validator,进行输入校验

上一篇讲 Binder 时提到,参数自动绑定和校验是 Web 框架很重要的两个功能,可以极大的提升开发速度,并更好的保证数据的可靠性(服务端数据校验很重要)。本节,我们就一起看看如何自定义 Echo 的表单校验功能。 不同于 Binder,Echo 并没有内置数据校验的能力,也就是没有默认的 Validator 实现。然而,你可以很方便的集成第三方的数据校验库。跟 Binder 类似,Echo 提供了一个 Validator 接口,方便将第三方数据校

Echo 系列教程——定制篇1:自定义 Binder,处理 Request 数据绑定

Web 开发,数据获取和校验是两个最基本的功能。在数据获取时,我们可以通过标准库的 *http.Request 提供的相关功能进行获取。然而这样效率是很低,重复工作较多,而且考虑到数据自动校验,我们更应该做到自动绑定。 在讲述 Echo 的 Binder 前,先探讨一下客户端数据一般通过什么方式发送给服务端的。 客户端如何传递数据给服务端? 这个问题其实对大部分人来说太简单了,然而,很多客户端的人却不清楚。工作中,我接触

Echo 系列教程——定制篇0:让 Echo 更强大、更好用

一个强大的框架,一定是可以定制的,或者说可以扩展,能够根据用户自己的需求进行改变、增强,甚至某些功能的替换。作为一个强大的框架,Echo 必然也是可以定制、可以扩展的。本篇起,我们一起探讨如何对 Echo 框架进行定制或扩展,打造成符合你个性需求的框架。 定制化主要包含如下一些方面: 自定义 Binder,用来处理 Request 数据绑定 自定义 Validator,用来处理输入验证 自定义 Lo

欢迎加入 GoLand 2020.1 抢先体验计划

GoLand 2020.1 抢先体验计划已经启动。对于此发行版,我们着重于易用性,性能以及减少浪费在样板代码和 IDE 中的冗余操作上的时间。我们还包括对 Go Modules 支持的升级,和其他更多功能。您可以在 2020.1 的路线图博客 文章中找到简短说明。 你可以通过 Toolbox App 获得它,也可以从网站上下载 ,也可以使用快照包(对于 Ubuntu);或者直接在 GoLand 中通过自动更新的方式获取。Preferences / Settings | Appearance & Behavior | System Settings | Updates。 如果您想知道什么是抢先体验计划,这里有一个简短的解释: EAP 版本使您可以试用 Goland 仍在开发中的最新功能和增强功能。这些版本尚未经过全面测试,可能会不稳定,但是您可以在这里为我们提供帮助。通过将这些内部版本和功能用于实际项目和场景中来测试,您可以帮助我们完善它们。这样,当最终版本准备就绪时,它将为您更好地工作。 EAP 使您可以首先试用所有最新功能; 自构建日期起 30 天内免费使用 EAP 版本。您可以将这段时间用作 GoLand 的扩展试用版; 我们会提供 EAP 版本,直到几乎可以发布稳定版本为止。对于即将推出的 2020.1 版本,EAP 期将大致持续到 3 月底; 在每个发布周期中,我们都会为他们提供免费的 1 年 GoLand 订阅和一件独家的 GoLand T 恤 ,以表彰他们中最活跃的评估人员。 此外,我们几乎每天都提供最新版本。因此,如果您不想等待正式的 EAP 版本公告,则只需下载这些夜间版本之一,即可通过 Toolbox App 获得。请注意,每晚构建的质量通常低于我们的标准,并且没有随附发行说明。与 EAP 版本一样,它们也将在发布后 30 天内过期; 因此,让我们看一下第一个 EAP 版本中包含的内容。 Go Modules 现在,您可以通过 go.mod 文件中的 Alt-Enter 来获取缺失的依赖项并删除未使用的依赖项。 Go 1.14 支持 Go 1.14 增加了对嵌入重叠接口的支持,我们也是如此!当您使用重叠的接口时,GoLand 不会将重复的方法报告为错误。 为什么将此功能添加到语言中? 主要好处是我们可以使用嵌入定义接口,而不需要手动定义。这是一个例子: type Person interface { Name() string String() string } type Employee interface { Person Department() string String() string } 在 Go 1.14 之前,我们无法在 Employee 接口上添加 String() 方法,因为该方法已在 Person 接口上定义了。现在,我们可以使用接口嵌入定义它,如果 Person 接口有更新,我们自己更可控。 代码补全/完成增强 我们对样板代码说不!GoLand 为常见的错误处理模式添加了代码完成功能。现在,当您在函数中键入if 时,您可以选择 err!= nil {…} 以自动完成它。 为了更快地定义接口和结构,现在,当您键入type 关键字时,IDE 会为它们建议模板。当您输入 interface 或 struct 时,将显示相同的补全内容。 现在,根据格式设置规则的要求,Fill Fields 操作会在冒号后添加空格,并在复合文字中的语句末尾添加逗号。 现在,当您使用 map 时,完成键类型后,代码补全将光标移到右括号后面。 智能代码补全建议使用指向结构的指针。 最终,代码补全变得更加智能,现在在断言和 type-switch-case 中会首先建议兼容类型。 代码编辑增强 当编写多值返回函数的签名时,GoLang 2020.1 将在逗号后面的返回类型周围自动添加括号。 此外,当您在字符串中粘贴一些文本时,GoLand 会自动转义双引号。 Postfix 完成模板 .else Postfix 完成模板可以快速添加 if 语句,以检查表达式是否为假。 实时模板 我们添加了新的 consts, vars, types, 和 import 模板 。对于这些模板,默认情况下,GoLand 将在表达式周围添加括号。 fori 模板插入经典 for 循环的样板代码。 重构 现在,即使接口定义中省略了参数名称,Implement Methods(在 macOS 和 Windows/Linux 上为 Ctrl + I)也允许您指定参数名称。

Echo 系列教程——基础篇3:通过一个例子串联各特性

通过前面的介绍,相信对 echo 有了一个初步的认识。本文我们通过一个简单的登录页面来串联 echo 的相关特性。因为该文主要关注各个特性,所以在目录结构和代码组织方面很随意。 本节最终效果 1)登录页面 2)登录失败 3)登录成功 main 函数骨架 使用 echo 框架,在程序入口处一般包含如下内容: func main() { // 创建 echo 实例 e := echo.New() // 配置日志 configLogger(e) // 注册静态文件路由 e.Static("img", "img") e.File("/favicon.ico", "img/favicon.ico") // 设置中间件 setMiddleware(e) // 注册路由 RegisterRoutes(e) // 启动服务 e.Logger.Fatal(e.Start(":2019")) } 日

更懂 module 的包资源中心:关于 pkg.go.dev 的前世今生和未来

北京时间 2019 年 11 月 14 日凌晨 1 点 16 分,Go 官方团队在 golang-nuts 邮件组宣布 go.dev 上线,这是一个新的 Go 开发人员中心。具体的介绍可以看我之前发布的文章 大家用Go都做什么?Go官方新发布的 Go.Dev 告诉你 。同时,go.dev 还提供了一个 Go 软件包和模块的新信息资源中心:pkg.go.dev,而在此之前,Go 已经存在了一个包资源网站:godoc.org。2020 年 1 月 31 日,在 Go 官方博客又发布了

Echo 系列教程——基础篇2:Echo 核心亮点介绍

在 Echo 的官网的首页,列出了 9 个核心功能或亮点。我这里将它说成是亮点(也许并不一定都比其他框架更好)。 一、优化的路由 高度优化的 HTTP 路由,动态内存分配为零,可对路由进行优先级排序。 这一点从上一篇:[搭建 Echo 开发环境](基础篇:搭建 Echo 开发环境.md) 可以看到。 Echo 路由基于 radix tree ,查询速度非常快。路由使用 sync pool 来重用内存,实现无 GC 开销下的零动态内存分配。 路由的注册和使用方式 各大

Echo 系列教程——基础篇1:搭建 Echo 开发环境

工欲善其事必先利其器。我们先搞定 Echo 环境。 Go 开发环境 这个系列基于 Go1.14.4,Linux 系统。 安装 Go 的方式有很多,可以在这里 https://studygolang.com/dl 下载对应操作系统的版本。我自己比较喜欢通过源码安装。我将我的方式告诉大家。(Windows 环境比较建议直接下载对应的包进行安装 https://studygolang.com/dl/golang/go1.14.4.windows-am