2011-09-17 8 views
3

약간의 행운으로 Go에서 사용자 입력을 캡처하려고합니다. 나는 비 간격 단어를 작동시킬 수 있습니다간격으로 사용자 입력을 캡처하십시오.

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

그러나, 이동 문서 스캔 공백과 새로운 라인을 구분하는 것을 말한다. 그래서 저는 bufio.Reader의 ReadLine을 설정해야한다고 생각합니다.

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 

그래서, 어떻게 "리더"정의합니까 여기에 컴파일되지 않습니다 내 시도는 무엇입니까? 그리고 이것이 정의 되었다면 이것은 입력을 문자열로 캡쳐하는 정확한 방법일까요, "\ n"으로 구분되고 공간에서는 구분되지 않습니까? 아니면 완전히 다른 것을해야합니까?

미리 감사드립니다. 당신이 bufio.NewReader에 대한 설명서를 보면 (가 일반 독자를 취하고 그 또한 Reader 인자를 자바에서 java.io.BufferedReader 유사, 버퍼 수 있기 때문에 의미가 있습니다)

답변

3

변경을 사용하여 File을 구성 할 수 있습니다.

메서드의 서명을 the spec에서 복사하여 붙여 넣은 것처럼 보이지만 사양에 서명이 정의되어 있지 않으므로 호출의 예로는 *Reader에 메서드의 반환 형식 (사용자의 형식 변수 r). 그리고이 메소드의 유일한 인수는 rd io.Reader으로 정의됩니다. 이 인터페이스는 작업에 가장 적합한 심볼 인 os.Stdin 심볼로 편리하게 구현됩니다.

P. "Learning Go" 문서 섹션의 모든 문서 (특히 "유효 이동")를 읽는 것이 좋습니다.

+0

감사합니다. 난 그냥 몇 가지 문제가 내 머리를 몇 가지 개념을 래핑하는 데, 워드 프로세서를 읽었습니다 :) – rick

1

, 그것은 유형 io.Reader의 인수를 사용합니다. io.Reader은 무엇입니까? 그것의 문서를 보면서, 그것은 Read 방법을 가지고있는 것을 지정하는 인터페이스이다. 많은 종류가 Read 방법이있다; 가장 일반적으로는 *os.File입니다. 그래서 당신은

r := bufio.NewReader() *Reader 

이 문제를 해결하기 위해

r := bufio.NewReader(os.Stdin) 

을 읽을 수 os.Open

f, _ := os.Open(file) 
r := bufio.NewReader(f) 
관련 문제