牧羊人nacy
我找到了一个 Go 命令行编辑器包https://github.com/peterh/liner,它包含了请求的功能和更多功能。它允许您编写具有历史记录和命令完成功能的 CLI,命令完成功能提供了我在问题中所要求的内容:它显示了用户可以编辑并提交给 CLI 的文本。它支持 Windows、Linux 和 Mac。这是 README 中示例的稍微修改版本,它运行带有命令完成功能的简单 CLI。例如,用户可以键入“j”并按 Tab 键循环浏览名称列表,编辑一个来品尝,然后按 Enter 提交。package mainimport ( "fmt" "log" "os" "strings" "github.com/peterh/liner")var ( history_fn = ".liner_history" names = []string{"jack", "john", "james", "mary", "mike", "nancy"})func main() { line := liner.NewLiner() defer line.Close() line.SetCompleter(func(line string) (c []string) { for _, n := range names { if strings.HasPrefix(n, strings.ToLower(line)) { c = append(c, n) } } return }) if f, err := os.Open(history_fn); err == nil { line.ReadHistory(f) f.Close() } line.SetCtrlCAborts(true) for true { if name, err := line.Prompt("What is your name? "); err != nil { if err.Error() == "EOF" || err == liner.ErrPromptAborted { break } log.Print("Error reading line: ", err) } else { log.Print("Got: ", name) line.AppendHistory(name) } } fmt.Printf("End of test\n") if f, err := os.Create(history_fn); err != nil { log.Print("Error writing history file: ", err) } else { line.WriteHistory(f) f.Close() }}