如果使用Go语句

时间:2016-10-13 14:23:39

标签: go

我正在玩Go。我想这样做,当有人进入'hi'打印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")
        }
    }

}

2 个答案:

答案 0 :(得分:3)

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

为了从标准输入读取,您可以使用ReadLine功能,或使用包stringsbytes手动修剪结束字符。

此外,您可以使用扫描仪,默认情况下会读取线条。以下是一些所有人都做同样工作的例子:

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")
    }

}

答案 1 :(得分:0)

只需添加\n

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