私は周りで遊んでいます。私は誰かが入ったとき、それはそう「ハイ」それはここでHIIIIf文でGO文を
を出力したい私のコードは、ちょうどそのコツがあり
if text == "hi\n" {
fmt.Println("hiii")
}
私は周りで遊んでいます。私は誰かが入ったとき、それはそう「ハイ」それはここでHIIIIf文でGO文を
を出力したい私のコードは、ちょうどそのコツがあり
if text == "hi\n" {
fmt.Println("hiii")
}
です:ときデリミタでReadString関数とReadBytes関数を使用すると、返される文字列(およびバイト)に区切り文字が含まれます。そのため、条件が真ではなく、実際の文字列は「hi \ n」であり、「hi」ではありません。
stdinから読み取るには、ReadLine関数を使用するか、パッケージstrings
とbytes
でエンドライン文字を手動でトリミングします。
また、スキャナを使用すると、デフォルトで行が読み込まれます。ここでは、すべてが同じ仕事をするいくつかの例は以下のとおりです。
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")
}
}
こと\n
などを追加
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")
}
}
}
[ 'ReadString'](https://golang.org/pkg/bufio/#Reader.ReadString)ドキュメントからのご質問 – mittmemo
概要:' ReadStringは、入力中にdelimが最初に現れるまで読み込み、デリミタまでのデータを含む文字列を返します。 – JimB