0Pricing
Go Academy · 강의

gob와 바이너리 인코딩

Go 값 인코딩하기

gob와 바이너리 인코딩은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

gob이란 무엇인가

encoding/gob은 Go 값 직렬화를 위한 Go 전용 바이너리 형식입니다. 크기가 작고 빠르므로 Go 프로그램 간 통신과 디스크 저장에 적합합니다.

gob과 JSON 비교

JSON은 텍스트 형식이며 사람이 읽을 수 있고 여러 언어에서 사용할 수 있습니다. gob은 바이너리 형식으로 Go에서만 사용할 수 있지만 인코딩할 때 더 작고 빠릅니다. 양쪽 모두 Go 프로그램일 때 gob을 사용하십시오.

버퍼로 인코딩하기

gob.Encoder는 어떤 io.Writer에도 씁니다. 여기서는 bytes.Buffer를 사용하여 바이너리 출력을 저장합니다.

package main

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

func main() {
	var buf bytes.Buffer
	enc := gob.NewEncoder(&buf)
	enc.Encode(42)
	fmt.Println("bytes written:", buf.Len())
}

버퍼에서 디코딩하기

gob.Decoder는 io.Reader에서 읽고 포인터가 가리키는 값에 데이터를 채웁니다. Unmarshal과 같은 방식입니다.

package main

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

func main() {
	var buf bytes.Buffer
	gob.NewEncoder(&buf).Encode(42)
	var n int
	gob.NewDecoder(&buf).Decode(&n)
	fmt.Println(n)
}

구조체 인코딩

gob은 구조체를 자연스럽게 처리합니다. 내보낸 필드만 인코딩됩니다.

package main

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

type User struct {
	Name string
	Age  int
}

func main() {
	var buf bytes.Buffer
	gob.NewEncoder(&buf).Encode(User{"Ann", 30})
	var u User
	gob.NewDecoder(&buf).Decode(&u)
	fmt.Println(u)
}

맵과 슬라이스 인코딩

맵과 슬라이스 같은 복합 타입은 투명하게 인코딩되고 디코딩됩니다.

package main

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

func main() {
	var buf bytes.Buffer
	gob.NewEncoder(&buf).Encode([]int{1, 2, 3})
	var s []int
	gob.NewDecoder(&buf).Decode(&s)
	fmt.Println(s)
}

자기 설명형 스트림

gob 스트림에는 타입 정보가 포함되므로 디코더는 약간 다르지만 호환되는 구조체에 매핑하더라도 값을 복원할 수 있습니다. 필드가 더 있거나 빠져 있어도 허용됩니다.

내보낸 필드만 사용

JSON과 마찬가지로 gob은 내보낸 필드만 인코딩합니다. 내보내지 않은 필드(소문자로 시작하는 필드)는 조용히 건너뜁니다.

package main

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

type T struct {
	Public  int
	private int
}

func main() {
	var buf bytes.Buffer
	gob.NewEncoder(&buf).Encode(T{Public: 1, private: 2})
	var out T
	gob.NewDecoder(&buf).Decode(&out)
	fmt.Println(out.Public, out.private)
}

다른 바이너리 옵션

원시 고정 크기 바이너리가 필요하다면 encoding/binary로 정수와 부동 소수점을 빅 엔디언 또는 리틀 엔디언으로 씁니다. gob보다 하위 수준이며 자체적으로 형식을 설명하지 않습니다.

package main

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

func main() {
	var buf bytes.Buffer
	binary.Write(&buf, binary.BigEndian, uint32(258))
	fmt.Println(buf.Bytes())
}

각 형식을 사용할 때

다음과 같이 선택하십시오.

  • json - API, 설정, 여러 언어 간 호환
  • gob - Go 프로그램 간 통신, 작은 크기, 구조체와 함께 사용하기 쉬움
  • binary - 정확한 바이트 배치, 프로토콜

사람이 읽을 수 없음

gob 출력은 바이너리이므로 출력하면 알아보기 어려운 문자가 표시됩니다. 이는 작은 크기를 얻기 위한 대가입니다. 사람이 읽는 로그가 아니라 기계 간 데이터에 사용하십시오.

빠른 확인

JSON보다 gob을 사용하는 편이 좋은 경우는 언제입니까?

복습

gob 및 바이너리 인코딩:

  • Go 프로그램 간 바이너리 데이터에는 gob.NewEncoder/NewDecoder를 사용합니다
  • 크기가 작고 자기 설명형이며 내보낸 필드만 사용합니다
  • 정확한 바이트 배치에는 encoding/binary를 사용합니다
  • 여러 언어 간 호환성과 가독성에는 여전히 JSON이 가장 적합합니다

자주 묻는 질문

“gob와 바이너리 인코딩” 강의는 무료인가요?

네 — “gob와 바이너리 인코딩” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“gob와 바이너리 인코딩”에서 뭘 배우나요?

Go 값 인코딩하기 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Go Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“gob와 바이너리 인코딩” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. encoding/json 복습
  2. encoding/xml
  3. encoding/csv
  4. gob와 바이너리 인코딩
← Go Academy(으)로 돌아가기