在Golang中如何设置向导程序
在Golang中如何设置向导程序 你好,我想设置一个类似向导的功能。我会打印一个数组的所有值,然后询问用户希望为工具保留哪些值在作用域内,之后工具再继续运行。这可以理解为一种由用户进行的过滤操作。
我该如何实现?
假设它返回一个像 [{123} {456} {789} {000}] 这样的数组,而用户只想保留第一个和第三个元素。一旦用户选择了这两个数字,工具就可以继续运行。
请告诉我,谢谢。
3 回复
你是在讨论过滤操作吗?你可以在这里找到一个示例,了解应该如何实现——SliceTricks
更多关于在Golang中如何设置向导程序的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
是的,我指的是像这样:
do you want to keep this value? (yes/no)
如果他输入“no”,该值将被删除;否则,程序将继续执行。感谢分享,这对我很有帮助!👍
在Golang中实现向导程序可以通过标准库的fmt和bufio包来处理用户交互。以下是一个示例实现:
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
// 初始数组
items := []string{"123", "456", "789", "000"}
// 打印所有选项
fmt.Println("可用选项:")
for i, item := range items {
fmt.Printf("%d: %s\n", i+1, item)
}
// 获取用户选择
selected := getUserSelection(items)
// 过滤数组
filteredItems := filterItems(items, selected)
fmt.Printf("您选择的项目: %v\n", filteredItems)
// 继续执行工具的其他逻辑
// yourToolContinue(filteredItems)
}
func getUserSelection(items []string) []int {
reader := bufio.NewReader(os.Stdin)
var selected []int
fmt.Println("\n请输入要保留的项目编号(用逗号分隔,如:1,3):")
for {
input, _ := reader.ReadString('\n')
input = strings.TrimSpace(input)
if input == "" {
fmt.Println("输入不能为空,请重新输入:")
continue
}
// 解析输入
selected = parseSelection(input, len(items))
if selected != nil {
break
}
fmt.Println("输入无效,请重新输入(如:1,3):")
}
return selected
}
func parseSelection(input string, maxItems int) []int {
parts := strings.Split(input, ",")
var selected []int
for _, part := range parts {
part = strings.TrimSpace(part)
if part == "" {
continue
}
num, err := strconv.Atoi(part)
if err != nil || num < 1 || num > maxItems {
return nil
}
// 检查重复
duplicate := false
for _, s := range selected {
if s == num-1 { // 转换为0-based索引
duplicate = true
break
}
}
if !duplicate {
selected = append(selected, num-1)
}
}
if len(selected) == 0 {
return nil
}
return selected
}
func filterItems(items []string, indices []int) []string {
var filtered []string
for _, idx := range indices {
if idx >= 0 && idx < len(items) {
filtered = append(filtered, items[idx])
}
}
return filtered
}
这个实现包含以下功能:
- 显示所有选项并编号
- 接受用户输入(支持逗号分隔的选择)
- 验证输入有效性
- 过滤数组并返回结果
运行示例:
可用选项:
1: 123
2: 456
3: 789
4: 000
请输入要保留的项目编号(用逗号分隔,如:1,3):
1,3
您选择的项目: [123 789]
如果需要更复杂的交互,可以考虑使用第三方库如survey:
import "github.com/AlecAivazis/survey/v2"
func useSurvey() {
items := []string{"123", "456", "789", "000"}
var selected []string
prompt := &survey.MultiSelect{
Message: "选择要保留的项目:",
Options: items,
}
survey.AskOne(prompt, &selected)
fmt.Printf("选择的项目: %v\n", selected)
}

