为了账号安全,请及时绑定邮箱和手机立即绑定

Go Lang - 如何在 Go 中构建命令行菜单

Go Lang - 如何在 Go 中构建命令行菜单

Go
慕尼黑的夜晚无繁华 2022-10-17 09:52:35
我正在构建一个 CLI 应用程序,它在基于 CLI 的菜单上与人类交互。例如 示例菜单图片我使用以下包 https://github.com/dixonwille/wmenu编写了代码。它按预期工作,但我不知道如何检索所选菜单项的索引并将其返回给 main() 函数。我非常感谢任何提示或有用的链接。谢谢小姐import (    "fmt"    "log"    "os"    "github.com/dixonwille/wmenu")func createMenu(p string, m []string) {    optFunc := func(option wmenu.Opt) error {        fmt.Println("")        fmt.Println("Option chosen: ", option.ID, option.Text)        return nil    }    menu := wmenu.NewMenu(p)    menu.ChangeReaderWriter(os.Stdin, os.Stdout, os.Stderr)    for i, m := range m {        menu.Option(m, i, false, optFunc)    }    err := menu.Run()    if err != nil {        log.Fatal(err)    }    // return i or option.ID    // index of a menu item}func main() {    prompt := "Select a Fruit"    menuitems := []string{"Apple", "Orange", "Mango"}    createMenu(prompt, menuitems)    // index := createMenu(prompt, menuitems)    // fmt.Println("Fruit Selected ",menuitems[index])}
查看完整描述

1 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

这是一个不言自明的工作示例,改动很小:


package main


import (

    "fmt"

    "log"

    "os"


    "github.com/dixonwille/wmenu"

)


type userInput struct {

    option wmenu.Opt

}


func (u *userInput) optFunc(option wmenu.Opt) error {

    u.option = option

    return nil

}


func createMenu(p string, m []string, u *userInput) {

    menu := wmenu.NewMenu(p)

    menu.ChangeReaderWriter(os.Stdin, os.Stdout, os.Stderr)

    for i, m := range m {

        menu.Option(m, i, false, u.optFunc)


    }

    err := menu.Run()

    if err != nil {

        log.Fatal(err)

    }

}


func main() {

    prompt := "Select a Fruit"

    menuitems := []string{"Apple", "Orange", "Mango"}

    u := &userInput{}

    createMenu(prompt, menuitems, u)

    fmt.Println("")

    fmt.Println("Option chosen: ", u.option.ID, u.option.Text)

}

不过,我不认为这是该库的设计方式。


查看完整回答
反对 回复 2022-10-17
  • 1 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信