项目介绍:Survey
Survey 项目是一个用于在支持 ANSI 转义序列的终端上构建交互式和无障碍提示库。通过这个库,开发者能够在终端中轻松创建各种交互式输入提示,如选择题、输入框、多选框等。
项目现状
遗憾的是,Survey 项目目前已经暂停维护。如果需要类似功能的工具,开发者推荐了一个替代项目,名为 BubbleTea。任何有兴趣接管这个项目维护的人都可以联系发起者。
基本用法
Survey 提供了两种主要的方法来执行提示并收集用户输入:Ask
和 AskOne
。其中,Ask
方法适用于需要收集多个问题答案的情况,而 AskOne
则适用于收集单一信息。
一个简单的例子展示了如何定义问题和收集回答:
package main
import (
"fmt"
"github.com/AlecAivazis/survey/v2"
)
func main() {
// 问题列表
var questions = []*survey.Question{
{
Name: "name",
Prompt: &survey.Input{Message: "What is your name?"},
Validate: survey.Required,
Transform: survey.Title,
},
{
Name: "color",
Prompt: &survey.Select{
Message: "Choose a color:",
Options: []string{"red", "blue", "green"},
Default: "red",
},
},
{
Name: "age",
Prompt: &survey.Input{Message: "How old are you?"},
},
}
answers := struct {
Name string
FavoriteColor string `survey:"color"`
Age int
}{}
// 执行问题并获取回答
err := survey.Ask(questions, &answers)
if err != nil {
fmt.Println(err.Error())
return
}
fmt.Printf("%s chose %s.", answers.Name, answers.FavoriteColor)
}
提示类型
Survey 提供了多种不同类型的提示,满足不同的交互需求:
- 输入框 (Input):用户输入文本。
- 多行输入框 (Multiline):允许用户输入多行文本。
- 密码输入框 (Password):隐藏用户输入的密码。
- 确认框 (Confirm):用户选择确认或否决。
- 选择框 (Select):从多个选项中选择一个。
- 多选框 (MultiSelect):用户可以选中多个选项。
- 编辑器 (Editor):用户可在偏好的文本编辑器中编辑内容。
配置与验证
Survey 提供了丰富的配置选项,允许开发者自定义每个提示的行为和验证逻辑。开发者可以通过配置选项设置各种验证规则,如必填字段、字符长度限制等。与此同时,还有多种内置验证器可用,例如 Required
、MinLength(n)
和 MaxLength(n)
。
高级特性
- 图标与帮助文本:可以自定义提示前显示的图标和帮助信息。
- 过滤选项:用户可以在选择提示时输入字符来过滤选项。
- 自定义类型支持:Survey 允许将用户输入的结果映射到自定义数据结构中。
常见问题
- 支持的 IO 类型:Survey 要求终端支持 ANSI 转义序列,因此不支持从管道输入或向管道输出。
- Ctrl-C 处理:Survey 在接收到 Ctrl-C 输入时不会直接终止程序,而是返回一个中断错误,开发者需要自行处理该错误以决定是否退出程序。
Survey 是一个功能丰富的交互式工具库,即便停止维护,也为开发者如何在终端中实现友好的用户交互提供了极具参考价值的实践。