모각코/2024 하계 [석드류]
[석드류] 5. Go 프로토콜 및 형식
Su_Do
2024. 8. 4. 22:40
JSON
JSON(JavaScript Object Notation)은 Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷이다.
장점은 모두 유니코드여서 사람이 읽기 쉽고 간결하게 표현되어있다.
Go 언어로 JSON을 만들 수 있다. 그것을 Marshalling이라고 한다.
package main
import (
"fmt"
"encoding/json"
)
type Person struct {
Name string
Age int
}
func main() {
p := Person{Name: "John", Age: 25}
byteData, err1 := json.Marshal(p) // Go to JSON
if err1 != nil {
fmt.Println(err1)
return
}
fmt.Println(string(byteData)) // {"Name":"John","Age":25}
var p2 Person
err2 := json.Unmarshal(byteData, &p2) // JSON to Go
if err2 != nil {
fmt.Println(err2)
return
}
fmt.Println(p2) // {John 25}
}
File
파일을 읽고 쓸 때는 ioutil 패키지를 사용한다.
- ioutil.ReadFile(filename) : filename인 파일을 읽는다. 바이트 배열로 반환한다.
- ioutil.WriteFile(filename, bytes, authority) : 내용이 bytes이고, 권한이 authority인 filename인 파일을 만든다.
package main
import (
"fmt"
"io/ioutil"
)
func main() {
data, err1 := ioutil.ReadFile("text.txt")
if err1 != nil {
fmt.Println("File reading error", err1)
return
}
fmt.Println(string(data)) // text.txt의 내용을 출력
err2 := ioutil.WriteFile("HelloWorld.txt", []byte("Hello World"), 0777)
// HelloWorld.txt 파일에 "Hello World"를 쓰고 권한을 0777로 설정
if err2 != nil {
fmt.Println("File writing error", err2)
return
}
}
OS
os 패키지는 ioutil 보다 파일에 액세스할 수 있는 다양한 기능을 더 제공한다.
- os.Open() : 파일 열기
- os.Close() : 파일 닫기
- os.Read() : 파일 읽기. ioutil과 달리 읽는 양을 제어할 수 있다.
- os.Write() : 파일 쓰기
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.Open("text.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
byteData := make([]byte, 10) // 크기가 10인 byte 배열 생성
count, err := file.Read(byteData)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(count, string(byteData)) // 10과 읽은 데이터 출력
file.Close()
}
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.Create("temp.txt")
if err != nil {
fmt.Println(err)
return
}
byteData := []byte{65, 66, 67}
count, err := file.Write(byteData)
if err != nil {
fmt.Println(err)
file.Close()
return
}
fmt.Println(count) // 3
file.WriteString("Hello World")
// temp.txt에는 ABCHello World가 저장됨
file.Close()
}