Go 读线和验证

Go 读线和验证,go,Go,在路径/操作/验证中的一个文件中: 在调用函数的下一个文件中: 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: d

在路径/操作/验证中的一个文件中:

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

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,但我不断得到错误的响应。我不知道为什么会发生这种情况,希望您能提供一些见解。

在返回的字符串中包含分隔符,因此您的CheckEnv函数最终会执行以下操作,例如:

return "qa\n" == "qa" || "qa\n" == "dev" || "qa\n" == "prd"
当然,这永远不会变成现实

您可以通过使用字符串之一.Trim*来解决此问题,例如,删除尾随行结尾字符和其他不需要的空白,如下所示:

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

从文档中:ReadString一直读取,直到输入中第一次出现delim,返回一个包含数据的字符串,直到delimiter@JimB这是否意味着我需要解析出分隔符?函数是TrimSpace@JimB忘记了第二个论点:“我仍然会使用TrimSpace,因为这仍然会在windows上留下一个尾随\r,所以您最好在使用时清除任何其他流氓空白
func CheckEnv(environment string) bool {
   env := strings.ToLower(strings.TrimSpace(environment))
   return env == "qa" || env == "dev" || env == "prd"
}