захватить интервал ввода пользователя - PullRequest
3 голосов
/ 17 сентября 2011

Я пытаюсь запечатлеть ввод пользователя в Go без особой удачи.Я могу заставить работать без пробелов слова:

var s string
println("enter string:")
fmt.Scan(&s)

Однако в документации Go сказано, что сканирование будет разделять пробелы и новые строки.Поэтому я думаю, что мне нужно настроить ReadLine для bufio.Reader.Вот моя попытка, которая не будет компилироваться:

package main

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

const delim = '\n'
const file = "file"

func main() {

    r := bufio.NewReader() *Reader

    println("enter string:")
    line, err := r.ReadString(delim)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
    fmt.Println(line)

}

ошибки:

1.go:14: not enough arguments in call to bufio.NewReader
1.go:14: undefined: Reader

Итак, как мне определить «Reader»?И если он был определен, будет ли это правильный способ записать ввод в виде строки, разделенной на «\ n», а не на пробел?Или я должен делать что-то совершенно другое?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 17 сентября 2011

Изменение

r := bufio.NewReader() *Reader

читать

r := bufio.NewReader(os.Stdin)

чтобы решить проблему.

Исходная кодировка неверна, потому что вы, кажется, просто скопировали и вставили подпись метода из спецификации , но спецификация определяет сигнатуру, а не пример вызова, так что *Reader там есть тип возврата метода (тип, который будет иметь ваша переменная r). И единственный аргумент метода определен как rd io.Reader; этот интерфейс удобно реализован символом os.Stdin, который идеально подходит для вашей задачи.

P.S. Попробуйте прочитать все документы в разделе документации «Learning Go» , особенно «Effective Go».

1 голос
/ 17 сентября 2011

Если вы посмотрите на документацию для bufio.NewReader, он принимает аргумент типа io.Reader (что имеет смысл, потому что он берет обычного читателя и делает его буферизованным, подобно java.io.BufferedReader в Java, который также принимает Reader аргумент). Что такое io.Reader? Глядя на его документацию, это интерфейс, определяющий все, что имеет метод Read. Многие типы имеют метод Read; чаще всего *os.File. Таким образом, вы можете построить File, используя os.Open и т. Д.

f, _ := os.Open(file)
r := bufio.NewReader(f)
...