Go 사항 시작: 표준 입력
열심히 공부하고 있습니다.
따라서 이번에는 표준 입력으로 데이터를 읽고 어쨌든 처리하여 표준 출력으로 출력한다
이런 프로그램을 만들려고 어렵게 Go로 해봤어요.
우선 os포장을 조사했습니다.
먼저 문서를 찾아보세요.
확실히 Go는 os라는 포장이 있을 거야...
역시 표준 입력과 출력은 os포장이죠.
그래서
Golang os
에서 검색했습니다.공식 문서 안전하게 발견된 후 stdin에서 페이지를 검색합니다.
오, 역시 있네요.
근데 이거 어떻게 읽는 거예요?
os.Stdin
는 포장에서 Stdin = NewFile(uintptr(syscall.Stdin), "/dev/stdin")
로 정의되었다.즉, File 유형으로 File 인터페이스의 링크를 확인하는 방법입니다.
fmfm,
func (f *File) Read(b []byte) (n int, err error)
등등.일단 해봐.
stdin.go
package main
import (
"os"
"fmt"
)
func main() {
buf := []byte{}
n, _ := os.Stdin.Read(buf)
fmt.Println("Read", n, "lines")
fmt.Println("Buf", string(buf))
}
$ echo "hello world!" | go run stdin.go
Read 0 lines
Buf
...응?$ echo "hello?" | go run stdin.go
Read 0 lines
Buf
아, 아니야...의Golang stdin으로 찾아봤어요.
한 방 쏘았다
stdin.go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
stdin := bufio.NewScanner(os.Stdin)
for stdin.Scan() {
if err := stdin.Err(); err != nil {
fmt.Fprintln(os.Stderr, err)
}
fmt.Println(stdin.Text())
}
}
공식 문서를 엿보다로 정의func NewScanner(r io.Reader) *Scanner
...응?io.Reader?
하지만 납품된 것은
os.Stdin
, 이것은File
유형이다.그리고 Go는 물려받지 않은 것 같은데...
이거 뭐야?
인터페이스의 편리성을 알 것 같아.
io.Reader의 정의는 다음과 같습니다훔쳐보다.
io.Reader
type Reader interface {
Read(p []byte) (n int, err error)
}
응?이거 방금 봤어요?중형 File조사해 보았다도 있습니다.
File.Read
func (f *File) Read(b []byte) (n int, err error)
아, 같은 방법을 정의했기 때문에 정의가 아니더라도io를 사용할 수 있습니다.Reader와 호환 가능활용할 수 있을지 없을지는 말하지 않고 받아들이자
그나저나 (s*Scanner).Scan()은 각 행에 대한 읽기 작업을 수행합니다.
(s *Scanner).Text()
현재 버퍼의 문자열만 되돌려주고 (s *Scanner).Scan()
버퍼의 내용을 다음 줄로 업데이트해야 합니다.반대로
(s *Scanner).Text()
는 반드시 같은 값을 되돌려주기 때문에 변수에 저장하지 않고 gan이라고 할 수 있다.(어느 정도 횟수가 있는 경우 편의를 위해 변수에 저장하는 것이 좋다)(이후 성능에 있어서는 어떻게 될지 모른다)
Reference
이 문제에 관하여(Go 사항 시작: 표준 입력), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takayukioda/items/edb30c7ba9ca28dba624텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)