Go 읽기 및 쓰기 데이터
사용자 입력
fmt.Scanxx
var s1,s2 string
fmt.Scanln(&s1,&s2)
이상은 비어 있지 않은 문자가 발생할 때까지 한 줄을 읽고 공백으로 구분합니다.그래서 코드가 이렇다면:
var s1,s2 string
fmt.Scanln(&s1)
fmt.Scanln(&s2)
fmt.Printnln(s1,s2)
abcd efg
를 입력하면 출력은 abcd fg
이 됩니다. 두 번째 단어의 첫 번째 문자는 줄 바꾸기로 처리되기 때문입니다.그러나 abcd
를 입력하면 두 번째 문자열은 읽을 수 없습니다. 줄별로 읽는 것이기 때문에 줄을 바꾸면 바로 읽을 수 없습니다.fmt.Scanf
C 언어의 scanf 사용법과 같다: fmt.Scanf("%s%s",&s1,&s2)
fmt.Scan()
들어오는 매개 변수를 읽을 때까지 줄 바꾸기를 처리하지 않습니다.fmt.Scan(&s1,&2)
와 같이 읽은 두 문자열 사이에 줄 바꿈이 있을 수 있습니다.fmt.Sscanxxx
S로 시작하는 scan 함수는 문자열을 처리하고 사용자 입력을 처리하지 않습니다.예:
input := "abcd efg"
fmt.Sscan(input,&s1,&s2)
fmt.Sscanln(input,&s1,&s2)
fmt.Sscanf(input,"%s%s",&s1,&s2)
bufio
bufio를 사용하여 데이터를 읽을 수도 있습니다.
inputScanner := bufio.NewScanner(os.Stdin)
inputScanner.Scan()
fmt.Println(inputScanner.Text())
여기서 inputScanner.Scan () 은 읽은 데이터를 내부 버퍼에 저장하고 inputScanner를 사용합니다.Text () 는 그것을 읽을 수 있습니다. Scan은 줄 바꾸기를 읽지 않을 뿐만 아니라,
와 같은 문자는 뜻을 바꾸지 않을 것입니다. inputReader := bufio.NewReader(os.Stdin)
input,err := inputReader.ReadString(',')
그러나 이 함수는 inputScanner와 다르다. 이것은 읽은 데이터와 error를 직접 되돌려주는 것이다. 그 중에서 매개 변수는 대응하는 문자를 읽으면 멈추고, 되돌아오는 데이터는 이 문자를 포함한다.따라서 입력이
abcd,
라면 input의 값은 abcd,
ReadString뿐만 아니라 ReadBytes
도 읽을 수 있지만 ReadBytes
는byte 형식의 슬라이드를 되돌려준다.byte 유형의 슬라이드와string은 서로 돌릴 수 있기 때문에 기본적으로 같다.파일 읽기와 쓰기
os.Open 및 bufio
os.Open("input.txt")
는 파일을 열 때 사용하는데 파일 형식은 일반적으로 os.*File
형식이고 os.Stdin
도 os.*File
형식이기 때문에 bufio.NewScanner()
나 bufio.NewReader
에게도 파일을 전송할 수 있다.그래서 파일 읽기의 가장 간단한 사고방식은 os.Open
와 bufio
패키지를 통해 실현하는 것이다. file,err := os.Open("test.go")
if err != nil{
fmt.Println(" ")
}
inputScan := bufio.NewScanner(file)
for inputScan.Scan() {
fmt.Println(inputScan.Text())
}
물론 bufio.NewReader(file)
를 통해 실현할 수 있지만 이러한 방법이 실현되는 필요 판단err
은 파일의 끝을 읽으면 io로 되돌아갈 수 있음을 주의하십시오.EOF, 따라서 전체 파일을 읽는 방법은 다음과 같습니다. file,err := os.Open("test.go")
if err != nil{
fmt.Println(" ")
}
inputReader := bufio.NewReader(file)
for {
line,err := inputReader.ReadString('
')
fmt.Printf("%s",line)
if err == io.EOF{
return
}
}
io로 돌아가는 것을 주의하십시오.EOF 때 라인 변수에도 값이 있습니다.
ioutil
ioutil을 이용하다.ReadXxx 함수는 다음과 같은 파일 컨텐트나 사용자 입력을 읽을 수 있습니다. file,err := os.Open("test.go")
defer file.Close()
if err != nil{
fmt.Println(" ")
}
bytes,err := ioutil.ReadAll(file)
if err != nil{
fmt.Println(" ")
}
fmt.Println(string(bytes))
ioutil.ReadAll에서 들어오는 것은 io입니다.Reader, 그래서 os.Open, 마침 io로 돌아왔습니다.Reader, 그래서 가능합니다.또한 ioutil.ReadFile
방법을 사용할 수 있는데 이 방법은 사실 상술한 방법에 대한 봉인이다. bytes,err := ioutil.ReadFile("test.go")
if err != nil{
fmt.Println(" ")
}
fmt.Println(string(bytes))
버퍼 읽기
f,err := os.Open("test.go")
if err != nil{
fmt.Println(" ")
}
fefer f.Close()
inputReader := bufio.NewReader(f)
buf := make([]byte,1024)
n,err := inputReader.Read(buf)
for n!=0 && err ==nil{
fmt.Println(string(buf))
n,err = inputReader.Read(buf)
}
여기서 inpuReader.Read 메서드는 읽은 바이트의 개수를 나타내는 n의 버퍼 매개 변수를 반환합니다.반드시 융통성이 있어야 한다. 이렇게 읽는 방식은 파일뿐만 아니라 화면 입력에도 적용된다.
fmt.Fscanxxx
같은 fmt에는 F로 시작하는 읽기 함수들이 포함되어 있는데 fmt.Sscanln``fmt.Sscan``fmt.Sscanf
와 유사하지만 첫 번째 파라미터는 입력 문자열에서 전송 파일로 바뀌었다.
파일 쓰기
가장 간단한 것은 fmt를 통과하는 것이다.Fprintf에서 문자열 쓰기: fmt.Fprintf(file,"some data
")
또는 fmt.Fprintln(file,"some data")
f,_ := os.Open("test.go")
_,err := fmt.Fprintln(f,"someData")
fmt.Println(err)
이 방법은 권한이 없으면 쓰기에 성공하지 못할 수 있음을 주의해야 한다. 다른 방법은 os.OpenFile
를 통해 파일을 열고 열 수 있는 방식을 부여하는 것이다. 예를 들어 다음과 같다. outputFile,err := os.OpenFile("test.go",os.O_WRONLY|os.O_CREATE,0666)
if err != nil{
fmt.Println(" ")
}
defer outputFile.Close()
outputFile.WriteString(" , ")
두 번째 매개변수는 읽기 전용 모드, 추가 모드 등이 있는 열린 모드입니다. 일반적으로 사용하는 모드는 다음과 같습니다.const (
O_RDONLY int = syscall.O_RDONLY // open the file read-only.
O_WRONLY int = syscall.O_WRONLY // open the file write-only.
O_RDWR int = syscall.O_RDWR // open the file read-write.
O_APPEND int = syscall.O_APPEND // append data to the file when writing.
O_CREATE int = syscall.O_CREAT // create a new file if none exists.
O_EXCL int = syscall.O_EXCL // used with O_CREATE, file must not exist
O_SYNC int = syscall.O_SYNC // open for synchronous I/O.
O_TRUNC int = syscall.O_TRUNC // if possible, truncate file when opened.
)
파일을 쓸 때 세 번째 인자는 0666이어야 하며 읽을 때 무시할 수 있습니다.너무 많은 내용을 쓰면 버퍼링된 쓰기 도구를 bufio에서 만들 수 있습니다.bufio.NewWriter(outputFile)
파일 복사 io.Copy(target,source)
하지만 소스 파일은 os를 통과할 수 있음을 주의하세요.Open은 읽고 target 파일은 os를 사용해야 합니다.OpenFile을 읽고 os.O_WRONLY 플래그 또는 기타 쓰기 가능 플래그
명령줄 읽기
명령줄 읽기는 os.Args
를 통해 명령의 파라미터를 얻을 수 있고 flag 패키지를 통해 파라미터를 설정할 수 있다.예를 들어 입력: ./goTest hahaha lalal
그럼os.Args에 저장된 것은 [./goTest,hahaha,lalal]이며os를 통과할 수 있습니다.Args[1]는 이 방법으로 체크 아웃합니다.
그런데 만약에 내가 ./goTest -name Mike
이런 방식으로 데이터를 찾으려면 어떡하지? 방법은 flag 패키지를 통해서야.예를 들면 다음과 같습니다. name := flag.String("name",""," ~")
flag.Parse()
fmt.Println(*name)
name은 flag를 통해 포인터 형식입니다.Parse () 방법은 명령줄의 매개 변수를 해석할 수 있으며 *name
를 통해 입력을 꺼낼 수 있다. flag.String
의 첫 번째 매개 변수는 명령줄의 매개 변수 이름을 나타낸다. 예를 들어 입력./goTest -name "hahah"
은 첫 번째 매개 변수에 대응하고 두 번째 매개 변수는name의 기본값이다. 입력하지 않으면name의 값은 이 기본값이고 세 번째 매개 변수는 설명이다. 보통-name
에만 나타난다.
물론 help
뿐만 아니라flag.String
등의 방법도 있다.flag.Bool
falg.StringVar
와 마찬가지로 flag.String
만 되돌아오는 값이 없고name 지침을 이 방법에 전달했다. flag.StringVar
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
file,err := os.Open("test.go")
if err != nil{
fmt.Println(" ")
}
inputScan := bufio.NewScanner(file)
for inputScan.Scan() {
fmt.Println(inputScan.Text())
}
file,err := os.Open("test.go")
if err != nil{
fmt.Println(" ")
}
inputReader := bufio.NewReader(file)
for {
line,err := inputReader.ReadString('
')
fmt.Printf("%s",line)
if err == io.EOF{
return
}
}
file,err := os.Open("test.go")
defer file.Close()
if err != nil{
fmt.Println(" ")
}
bytes,err := ioutil.ReadAll(file)
if err != nil{
fmt.Println(" ")
}
fmt.Println(string(bytes))
bytes,err := ioutil.ReadFile("test.go")
if err != nil{
fmt.Println(" ")
}
fmt.Println(string(bytes))
f,err := os.Open("test.go")
if err != nil{
fmt.Println(" ")
}
fefer f.Close()
inputReader := bufio.NewReader(f)
buf := make([]byte,1024)
n,err := inputReader.Read(buf)
for n!=0 && err ==nil{
fmt.Println(string(buf))
n,err = inputReader.Read(buf)
}
")
f,_ := os.Open("test.go")
_,err := fmt.Fprintln(f,"someData")
fmt.Println(err)
outputFile,err := os.OpenFile("test.go",os.O_WRONLY|os.O_CREATE,0666)
if err != nil{
fmt.Println(" ")
}
defer outputFile.Close()
outputFile.WriteString(" , ")
const (
O_RDONLY int = syscall.O_RDONLY // open the file read-only.
O_WRONLY int = syscall.O_WRONLY // open the file write-only.
O_RDWR int = syscall.O_RDWR // open the file read-write.
O_APPEND int = syscall.O_APPEND // append data to the file when writing.
O_CREATE int = syscall.O_CREAT // create a new file if none exists.
O_EXCL int = syscall.O_EXCL // used with O_CREATE, file must not exist
O_SYNC int = syscall.O_SYNC // open for synchronous I/O.
O_TRUNC int = syscall.O_TRUNC // if possible, truncate file when opened.
)
bufio.NewWriter(outputFile)
io.Copy(target,source)
하지만 소스 파일은 os를 통과할 수 있음을 주의하세요.Open은 읽고 target 파일은 os를 사용해야 합니다.OpenFile을 읽고 os.O_WRONLY 플래그 또는 기타 쓰기 가능 플래그명령줄 읽기
명령줄 읽기는 os.Args
를 통해 명령의 파라미터를 얻을 수 있고 flag 패키지를 통해 파라미터를 설정할 수 있다.예를 들어 입력: ./goTest hahaha lalal
그럼os.Args에 저장된 것은 [./goTest,hahaha,lalal]이며os를 통과할 수 있습니다.Args[1]는 이 방법으로 체크 아웃합니다.
그런데 만약에 내가 ./goTest -name Mike
이런 방식으로 데이터를 찾으려면 어떡하지? 방법은 flag 패키지를 통해서야.예를 들면 다음과 같습니다. name := flag.String("name",""," ~")
flag.Parse()
fmt.Println(*name)
name은 flag를 통해 포인터 형식입니다.Parse () 방법은 명령줄의 매개 변수를 해석할 수 있으며 *name
를 통해 입력을 꺼낼 수 있다. flag.String
의 첫 번째 매개 변수는 명령줄의 매개 변수 이름을 나타낸다. 예를 들어 입력./goTest -name "hahah"
은 첫 번째 매개 변수에 대응하고 두 번째 매개 변수는name의 기본값이다. 입력하지 않으면name의 값은 이 기본값이고 세 번째 매개 변수는 설명이다. 보통-name
에만 나타난다.
물론 help
뿐만 아니라flag.String
등의 방법도 있다.flag.Bool
falg.StringVar
와 마찬가지로 flag.String
만 되돌아오는 값이 없고name 지침을 이 방법에 전달했다. flag.StringVar
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
name := flag.String("name",""," ~")
flag.Parse()
fmt.Println(*name)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.