[go] Go 언어에서의 인코딩 관련 디자인 패턴

Go 언어에서는 UTF-8 인코딩을 기본적으로 지원하며, 데이터의 인코딩과 디코딩에 관련된 다양한 디자인 패턴을 활용할 수 있습니다. 이러한 디자인 패턴은 데이터의 안전한 처리, 네트워크 통신, 파일 입출력 등 다양한 상황에서 유용하게 활용될 수 있습니다.

1. 문자열과 바이트 슬라이스 변환

Go 언어에서 문자열은 UTF-8로 인코딩되어 있고, string 타입과 []byte 타입 사이에 변환을 하는 것이 중요합니다.

package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    str := "안녕하세요"
    bytes := []byte(str)

    fmt.Println("Length of string:", len(str))
    fmt.Println("Length of bytes:", len(bytes))
    fmt.Println("Rune count:", utf8.RuneCountInString(str))
}

2. JSON 데이터 다루기

Go 언어에서 JSON 데이터를 다룰 때, 데이터의 인코딩과 디코딩을 올바르게 처리하는 것이 중요합니다. 다음은 JSON 데이터의 인코딩과 디코딩 예제입니다.

package main

import (
	"encoding/json"
	"fmt"
)

type Person struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

func main() {
	p := Person{Name: "Alice", Age: 30}

	// JSON 인코딩
	jsonData, _ := json.Marshal(p)
	fmt.Println(string(jsonData))

	// JSON 디코딩
	var newP Person
	_ = json.Unmarshal(jsonData, &newP)
	fmt.Println(newP)
}

3. 네트워크 통신에서의 데이터 인코딩

Go 언어에서는 네트워크 통신에서 데이터를 주고받을 때 인코딩된 데이터를 다루는 경우가 많습니다. 특히, encoding/binary 패키지를 사용하여 바이너리 데이터를 다룰 때는 엔디안과 같은 인코딩 관련 이슈에 유의해야 합니다.

package main

import (
	"bytes"
	"encoding/binary"
	"fmt"
)

func main() {
	var buf bytes.Buffer

	data := uint32(42)
	_ = binary.Write(&buf, binary.LittleEndian, data)

	readData := new(uint32)
	_ = binary.Read(&buf, binary.LittleEndian, readData)

	fmt.Println(*readData)
}

Go 언어에서 데이터의 안전한 인코딩과 디코딩을 다루는 것은 프로그램의 안정성과 신뢰성을 높이는데 중요합니다.

참고 자료