带Go的If语句

带Go的If语句,go,Go,我在玩围棋。我想这样,当有人输入“嗨”时,它会打印hiii 这是我的密码 package main import ( "fmt" "bufio" "os" ) func main(){ reader := bufio.NewReader(os.Stdin) fmt.Println("Simple Shell") fmt.Println("---------------------") for { fmt.Print(

我在玩围棋。我想这样,当有人输入“嗨”时,它会打印hiii

这是我的密码

package main

import (
    "fmt"
    "bufio"
    "os"
)

func main(){

    reader := bufio.NewReader(os.Stdin)
    fmt.Println("Simple Shell")
    fmt.Println("---------------------")

    for {
        fmt.Print("-> ")
        text, _ := reader.ReadString('\n')
        if (text == "hi") {
            fmt.Println("hiii")
        }
    }

}

只需添加
\n
即可

if text == "hi\n" {
    fmt.Println("hiii")
}

这里有一个技巧:当使用带有分隔符的ReadString和ReadBytes函数时,返回的字符串(和字节)包含分隔符。这就是为什么条件不是真的,您的实际字符串是“hi\n”而不是“hi”

为了从stdin中读取,您可以使用ReadLine函数,或者使用包
字符串
字节
手动修剪结束行字符

此外,您还可以使用扫描仪,默认情况下它会读取行。以下是一些示例,它们都做相同的工作:

package main

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

func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("-> ")
    text, _, _ := reader.ReadLine()
    if string(text) == "hi" {
        fmt.Println("hii")
    }

    fmt.Print("-> ")
    stext, _ := reader.ReadString('\n') // stext ends with '\n', it reads the delimiter
    stext = strings.TrimRight(stext, "\n")
    if stext == "hi" {
        fmt.Println("hii")
    }

    fmt.Print("-> ")
    text, _ = reader.ReadBytes('\n')
    text = bytes.TrimRight(text, "\n")
    if string(text) == "hi" {
        fmt.Println("hii")
    }

    fmt.Print("-> ")
    scanner := bufio.NewScanner(os.Stdin)
    scanner.Scan()
    stext = scanner.Text()
    if stext == "hi" {
        fmt.Println("hii")
    }

    fmt.Print("−> ")
    scanner.Scan()
    text = scanner.Bytes()
    if string(text) == "hi" {
        fmt.Println("hii")
    }

}

您在文档中的问题是什么:
ReadString读取直到输入中第一次出现delim,返回一个包含数据的字符串,直到并包括分隔符。