带Go的If语句
我在玩围棋。我想这样,当有人输入“嗨”时,它会打印hiii 这是我的密码带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(
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,返回一个包含数据的字符串,直到并包括分隔符。