还在用 2019.3 就 Out 了:GoLand 2020.1 版本正式发布

北京时间 2020 年 4 月 10 日凌晨,Jetbrains 宣布正式发布 GoLand 2020.1 版本。 该版本主要的变化有: 引入了对 Go 模块支持的各种升级以及代码编辑功能,这些功能几乎不需要用户交互,也不需要扩展的代码补全系列。 除此之外,还添加了新的代码检查、快速修复和其他改进,例如新的 LightEdit 模式(可让您在文本编辑器中打开文件,而无需创建或加载项目)、智能拼写和语法检查以及用于 Web 开发和数据库处理的新功能。 Go 语言中文网在 2020.1 还未正式发布之前,就发过关于该版本特性的文章,现在 2020.1 正式发布了,相关功能特性稳定了,我们再次介绍下相关新特性。 Go 模块改进 2020.1 现已支持 Go 1.13 的环境变量 GOPROXY、GOPRIVATE、GOSUMDB、GONOPROXY 和 GONOSUMB。 使用 Go Modules 项目模板配置其默认值。只需点击 Environment 字段中的 Browse 图标即可打开新的 Environment Variables 对话框。 go.mod 文件支持 go、module、require、replace 和 exclude 关键字代码补全、依赖项名称以及本地路径替换。 此外,也可以使用 Rename 和 Move 重构。 重命名或移动由 replace 语句引用的目录时,GoLand 将相应地更改 go.mod 文件中的路径。 现在,您还可以通过 Project 视图调用 Find Usages,以探索 go.mod 文件中特定目录路径的使用位置。 在 GoLand 2020.1 中,您可以通过 Alt-Enter 获取缺失的依赖项并移除未使用的依赖项。 最后但同样重要的是,如果存在本地路径替换,则新版本将在您提交之前显示一条通知,这样您就不会意外提交它们。 您无需学习如何使用的代码补全功能 GoLand 2020.1 将建议 if err != nil { … } 来补全错误处理模式。 只需在表达式内输入 if。 只需输入 type 关键字或 struct 和 interface,即可更快地定义结构和接口类型。 Fill Fields 操作在格式化规则要求时会在冒号后面添加空格。 它还会在组合文字声明中语句的末尾添加逗号。 现在,使用 map 时,代码补全会在您补全键类型后将光标移到右中括号后面。 对于函数的返回类型,补全功能将为局部变量和零值提供适合相应返回值类型的建议。 智能代码补全(⌥⇧Space 或 Ctrl+Shift+Space) 智能代码补全会建议一个指向结构初始值设定项的指针。 它还会建议在断言和类型 switch 用例中首先使用兼容类型。 在类型断言中,它提供已赋值变量的类型。 最后,它提供了表达式中可能指针的建议列表。 基本代码补全(⌃空格或 Ctrl+空格) 为注释添加了基本代码补全,这将使编写文档更加轻松! 它可为当前包声明建议名称,并为函数和方法建议参数名称。除此之外,基本代码补全还可以建议文字和转换。 代码编辑 编写多值返回函数的签名时,GoLand 2020.1 会在逗号后面的返回类型周围添加括号。当您在字符串文字中粘贴一些文本时,IDE 会转义双引号。 Go 1.14 支持 1)支持重叠接口 Go 1.14 添加了对嵌入重叠接口的支持,我们也添加了此功能! 当您使用重叠接口描述类型的不同方面时,GoLand 不会将这些方面的重复方法报告为错误。 2)自动 vendoring 模式 如果模块根包含 vendor 目录,则会在 Go 1.14 中自动启用 vendoring 模式。 对于 GoLand 2020.1,我们决定为 Go 1.13 及更早版本实现类似的行为。 IDE 会自动将导入解析到 vendor/ 文件夹(如果模块中存在)。 调试器更新 1)分析器标签支持 为了帮助您在调试或核心转储分析过程中更轻松地区分 goroutine,我们为其添加了分析器标签。更多详情请参考:如何在调试过程中查找 Goroutine 。 2)宏支持 现在,可以将宏用作运行或调试应用程序的参数。 在 Run/Debug Configurations 对话框中,点击 Go Tool 中的 + 或 Program arguments 字段即可打开新的 Macros 对话框,其中会列出要使用的可用宏。 此外,您现在还可以将配置文件存储在项目中。 在 Run/Debug Configurations 对话框的顶部,选择 Store 作为项目文件选项。

Echo 系列教程——定制篇4:自定义 Renderer,增强或替换模板引擎

Render,顾名思义,要进行页面渲染。Go 语言不但自带有强大的 http 库,还自带了 HTML 模板引擎。Echo 框架对模板引擎进行了一些额外处理,并提供了给用户自定义页面渲染的接口。本文就相关问题进行探讨。 模板渲染 Echo 框架的 Context 接口提供了下面的方法进行页面渲染: // echo 包中 Context 接口的方法 Render(code int, name string, data interface{}) error 其中,code 是 HTTP Status,name 是定义的模板名,data 是模板可能需要的数

Echo 系列教程——定制篇5:自定义 HTTP Error Handler,让 HTTP 错误处理更友好

Echo 倡导通过从中间件和 Handler 返回错误来进行集中式 HTTP 错误处理。集中式错误处理程序使我们能够从统一位置将错误记录到外部服务,并向客户端发送自定义的 HTTP 响应。本节一起学习如何定制化,进行集中式错误处理。 默认的错误处理 在定制篇 4 中,我们讲到了 Render。如果在 Handler 中调用了 Render,但是并没有给 Echo.Renderer 赋值或其他原因,导致出错,页面看到的信息如下: { "message": "Internal Server Error" } 这是 Echo 默认的 HTTP Error H

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")) } 日