[go] go 언어에서의 encoding/hex 패키지와 문자열 처리

Go 언어는 효율적이고 강력한 표준 라이브러리로 유명합니다. 특히 문자열과 바이트 슬라이스를 다루는데 있어서 매우 다양하고 유용한 기능을 제공합니다. 이번에는 Go 언어에서 문자열 처리와 인코딩을 다루는 두 가지 패키지인 encodinghex에 대해 알아보겠습니다.

encoding 패키지

encoding 패키지는 데이터를 다른 형식으로 인코딩하고 디코딩하기 위한 기능을 제공합니다. 예를 들어, JSON, XML, CSV 등과 같은 데이터 형식으로의 인코딩 및 디코딩을 수행할 수 있습니다. 또한 base64, binary, hexadecimal 등과 같은 바이트 스트림의 인코딩 및 디코딩을 할 수 있습니다.

아래는 encoding 패키지를 이용하여 JSON 인코딩과 디코딩을 하는 간단한 예제 코드입니다.

import (
    "encoding/json"
    "fmt"
)

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

func main() {
    // JSON 데이터를 인코딩
    person := Person{Name: "John", Age: 30}
    jsonData, err := json.Marshal(person)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(jsonData)) // {"name":"John","age":30}

    // JSON 데이터를 디코딩
    var newPerson Person
    err = json.Unmarshal(jsonData, &newPerson)
    if err != nil {
        panic(err)
    }
    fmt.Println(newPerson) // {John 30}
}

hex 패키지

hex 패키지는 바이트 스트림을 16진수로 인코딩하거나 16진수를 바이트 스트림으로 디코딩하기 위한 기능을 제공합니다. 예를 들어, 바이너리 데이터를 읽을 때 16진수 형태로 출력하거나 16진수 형태의 문자열을 다시 바이트 스트림으로 변환할 수 있습니다.

아래는 hex 패키지를 이용하여 16진수 인코딩과 디코딩을 하는 간단한 예제 코드입니다.

import (
    "encoding/hex"
    "fmt"
)

func main() {
    // 바이트 스트림을 16진수로 인코딩
    data := []byte{0x48, 0x65, 0x6c, 0x6c, 0x6f}
    hexData := make([]byte, hex.EncodedLen(len(data)))
    hex.Encode(hexData, data)
    fmt.Println(string(hexData)) // 48656c6c6f

    // 16진수를 바이트 스트림으로 디코딩
    decodedData := make([]byte, hex.DecodedLen(len(hexData)))
    _, err := hex.Decode(decodedData, hexData)
    if err != nil {
        panic(err)
    }
    fmt.Println(decodedData) // [72 101 108 108 111]
}

마치며

Go 언어의 encoding 패키지와 hex 패키지는 데이터를 다양한 형식으로 변환하고 처리하는 강력한 도구입니다. 이러한 기능을 활용하여 웹 애플리케이션, 시스템 프로그래밍, 네트워크 프로그래밍 등 다양한 분야에서 유용하게 활용할 수 있습니다.

더 많은 정보는 공식 Go 언어 문서에서 확인할 수 있습니다.