【导读】go命令行程序怎么才能更友好、不乱码?本文介绍了一个使用工具,可以用来优化命令行程序。
hintui是一个Go库,它提供了一个用于创建cli提示的简单界面。该库有两种主要模式:提示 -提供用户输入的一行;选择 - 选择 ,显示要选择的项目列表。两种模式都有几种自定义选项,并利用强大的读取线支持多个终端。
在本文中,我们将创建一个食品食谱命令行应用程序,该应用程序询问菜式,从API检索信息并显示相关食谱。
如果要跳至完整的应用程序源代码,请访问:https : //github.com/luizbranco/promptui-demo/
在开始我们的应用程序之前,我们首先需要获取该库:
go get -u github.com/manifoldco/promptui
这样,我们就可以开始编写main.go
文件了。
如果然后运行该程序,则应该看到提示要求搜索的提示:
go run main.go
看起来不错,但是如果我们只按Enter键而不输入信息,它仍然有效。如果我们可以防止空搜索,那就太好了。因此,让我们向提示添加验证:
这是一个非常简单的验证。但是,例如,您可以使用regexp或govalidator创建更复杂的代码 。
对于此cli应用程序,我们将使用超赞的RecipePuppy搜索食谱。其API不需要身份验证,因此非常适合我们的实验 。
首先,我们定义如何请求数据:
这很容易!现在,我们必须解析响应JSON。首先,我们需要一个返回数据的示例:
如我们所见,每个标题都有一系列带有标题,链接和成分列表的结果。这样,我们可以定义一些结构来解析主体:
现在我们已经解析了配方列表,我们可以使用_Select_将其显示给用户。
好吧,这有点丑陋。这里的问题是,提示符提示符通常希望显示一部分字符串。但是我们有配方结构。我们必须教提示如何显示它们。那是模板方便的时候:
如果您使用过Go 模板/ html ,则应该熟悉语法。现成的Promptui支持一些模板功能,例如颜色和样式,但是您可以定义自己的帮助器。
好多了!注意那里的披萨unicode符号。Go支持UTF-8源代码👍。
由于我们还有成分列表,因此我们可以在用户使用“ Details
模板选项将元素悬停在元素上时显示它。但是首先,让我们成为好cli公民,避免使用大量配料!
这定义了一个自定义帮助函数,该函数将截断长度超过X个字符的字符串。然后我们将模板更改为:
最后,允许用户在线搜索列表中的配方名称或配料:
与验证示例一样,这是一个简单的字符串搜索,但是您可以根据需要进行复杂的搜索。
promptui是我们命令行工具 Manifold的一部分,当用户没有输入命令所需的所有标志时,我们主要将它用作后备。这个小应用程序显示了hintuiui的一些功能,但是该库提供了更多功能。确保检查Github项目页面 。
From: https://hackernoon.com/improve-your-command-line-go-application-with-promptui-258ebe9eed1
转自:dfsgwe1231
blog.csdn.net/dfsgwe1231/article/details/106008440
- EOF -
Go 开发大全
参与维护一个非常全面的Go开源技术资源库。日常分享 Go, 云原生、k8s、Docker和微服务方面的技术文章和行业动态。
关注后获取
回复 Go 获取6万star的Go资源库
分享、点赞和在看
支持我们分享更多好文章,谢谢!