不在 golang 中打印一系列变量

Not printing series of variable in golang

我正在学习 Golang 使用 go v1.18 得到了一些奇怪的输出 当我打印 firstName, lastName, birthday, created 时只得到结果 created 我已经打印了声明变量并再次打印了整个东西,它工作正常 问题出在 var reader = bufio.NewReader(os.Stdin)

package main

import (
    "bufio"
    "fmt"
    "os"
    "strings"
    "time"
)

var reader = bufio.NewReader(os.Stdin)

func main() {
    firstName := getUserData("Enter First Name: ")
    lastName := getUserData("Enter Last Name: ")
    birthdate := getUserData("Enter Date of Birth: ")
    created := time.Now()

    fmt.Println(firstName, lastName, birthdate, created) //only prints created
    fmt.Println(firstName) // prints firstName
    fmt.Println(lastName) // prints lastName
    fmt.Println(birthdate) // prints birthdate
    fmt.Println(created) // prints created
}

func getUserData(promptText string) string {
    fmt.Print(promptText)
    userInput, _ := reader.ReadString('\n')
    cleanedInput := strings.Replace(userInput, "\n", "", -1)
    return cleanedInput
}

你必须使用 strings.TrimSpace 而不是 strings.Replace 因为在你的代码中你没有删除 Carriage return \r

请参阅下面更正后的代码。

package main

import (
    "bufio"
    "fmt"
    "os"
    "strings"
    "time"
)

var reader = bufio.NewReader(os.Stdin)

func main() {
    firstName := getUserData("Enter First Name: ")
    lastName := getUserData("Enter Last Name: ")
    birthdate := getUserData("Enter Date of Birth: ")
    created := time.Now()

    fmt.Println(firstName, lastName, birthdate, created) //will print all
    fmt.Println(firstName)                               // prints firstName
    fmt.Println(lastName)                                // prints lastName
    fmt.Println(birthdate)                               // prints birthdate
    fmt.Println(created)                                 // prints created
}

func getUserData(promptText string) string {
    fmt.Print(promptText)
    userInput, _ := reader.ReadString('\n')
    cleanedInput := strings.TrimSpace(userInput)

    return cleanedInput
}