ReadLine和验证

时间:2018-06-21 17:03:27

标签: go

在路径/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)
}

在出现提示时,我尝试了qadev,但一直收到false作为响应。我不知道为什么会这样,请提供任何见解。

1 个答案:

答案 0 :(得分:1)

bufio.Reader.ReadString在返回的字符串中包含定界符,因此您的CheckEnv函数最终会这样做(例如):

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

这当然永远不会返回true

您可以通过使用TrimSpace之类的strings.Trim*之一来删除尾行结尾字符和其他不需要的空格,例如:

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