Wisdom기록보관소
Go 파일 입출력을 해보자! 본문
일단! 티스토리에서 제공하는것 보다 마크다운에 익숙해져보기 위해 이 탬플릿을 사용해봅시다!
어쩌다 보니 Go 언어를 사용하게 되었다.
왜 사용하는지 궁금해 할사람은 없으니 재목에 맞는 포스팅을 가즈아.
다른 언어와 비슷하게 파일의 경로를 상대적, 절대경로등으로 파라미터를 주고 사용후에 close를 해주는 등 비슷한 사용법이였다.
ex)
package main
import (
"os"
)
func main() {
jsonFile, err := os.Create("test.json")
if err != nil {
panic(err)
}
jsonFile.Write([]byte("Go를 공부 해봅시다."))
jsonFile.Close()
}
아주 간단하다 기본적인 go문법은 다른 곳에 적어놓고 보기로 하고
os란 패키지를 사용해서 파일을 생성하고 데이터를 썻다.
기본적으로 제공 되는 패키지이지만 이거 말고도 다양한 입출력 패키지가 내장되어 제공되고 있다.
package "os"
os는 low level에서 운영체제 기능에 대한 플랫폼과는 독립적인 인터페이스를 제공하는 패키지이다. Unix와 비슷한 디자인이지만, 에러 처리는 Go와 비슷하다. os.File 타입은 디스크 위에 파일이나 바이트를 스트리밍하는 io.Reader, io.Writer를 구현할 때 사용된다.package "io"
io는 I/O primitive(가장 기본 단위)의 기본 인터페이스를 제공하는 패키지이다. 바이트 스트림(io.Reader, io.Writer, etc..)을 처리하는 인터페이스 뿐만 아니라 io.Copy(파일 복사), io.ReadFull(n byte 읽기)와 같은 함수를 제공한다.package "io/util"
io/ioutil는 I/O 유틸리티 함수를 구현한 패키지이다. io.ReadFile은 전체 파일을 메모리로 읽어들여 빠른 읽기를 수행할 수 있다. 그래서 큰 파일을 읽을 때는 사용하지 않는 것이 좋다. 정확한 파일 크기의 byte slice([]byte)를 할당하며, 자동으로 파일을 닫는다.package "bufio"
bufio는 효율 향상을 위해 입출력을 버퍼링하는 io.Reader, io.Writer를 래핑하는 타입을 제공한다. 행, 단어 단위로 읽기를 수행할때 사용한다. bufio.Scanner는 독립적인 행(line)을 효율적으로 읽는 데 유용한 타입이다. Scanner의 Scan()함수는 미리 정의된 개행문자 혹은 사용자가 정의한 delimeter(Split()사용)를 만날 때까지를 한 줄로(행, line) 판단하여 데이터를 한줄씩 읽는다.
급하게 정리하느라 위와같은 패키지들이 있다는것만 확인하였다. 목적에 맞게 해당 패키지를 사용하면 되겠다.
데이터의 저장에는 사실 DB를 따로 사용하새 하겠지만 후에 이미지나 다른 파일들을 컨트롤 할때 필요할때를 대비해 공부를 해노아야겠다.
...