모각코/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()
}