代码之家  ›  专栏  ›  技术社区  ›  mralanlee

readline和验证

go
  •  0
  • mralanlee  · 技术社区  · 7 年前

    在路径中的一个文件中 /operations/validate :

    package operations
    
    import (
       "strings"
    )
    
    func CheckEnv(environment string) bool {
       env := strings.ToLower(environment)
       return env == "qa" || env == "dev" || env == "prd"
    }
    

    在调用函数的下一个文件中:

    package prompts
    
    import (
        "bufio"
        "fmt"
        "os"
        val "thirsty/operations"
    )
    
    // AskEnv prompts for Environment
    func AskEnv() {
        reader := bufio.NewReader(os.Stdin)
        fmt.Print("Enter environment (ex: dev, qa, prd): ")
        environment, _ := reader.ReadString('\n')
        fmt.Println(environment)
        env := val.CheckEnv(environment)
        if !env {
            fmt.Printf("Invalid Argument: No environment found for %s", environment)
            return
        }
    
        os.Setenv("env", environment)
        fmt.Printf("Environment set to %s", environment)
    }
    

    在提示过程中,我试过 qa dev 但我总是 false 作为回应。我不知道为什么会发生这种情况,并且会感激提供的任何洞察力。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Marco Bonelli    7 年前

    bufio.Reader.ReadString 在返回的字符串中包含分隔符,因此 CheckEnv 函数最终执行(例如):

    return "qa\n" == "qa" || "qa\n" == "dev" || "qa\n" == "prd"
    

    当然不会再回来了 true .

    您可以使用 strings.Trim* ,像 TrimSpace ,删除尾随行结束字符(S)和其他不需要的空白,如下所示:

    func CheckEnv(environment string) bool {
       env := strings.ToLower(strings.TrimSpace(environment))
       return env == "qa" || env == "dev" || env == "prd"
    }