猿问

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

我正在构建一个 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])

}


慕尼黑的夜晚无繁华
浏览 117回答 1
1回答

小唯快跑啊

这是一个不言自明的工作示例,改动很小:package mainimport (    "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)}不过,我不认为这是该库的设计方式。
随时随地看视频慕课网APP

相关分类

Go
我要回答