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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- encoding/json 복습
- encoding/xml
- encoding/csv
- gob와 바이너리 인코딩