gob 활용

w00j00ng351·2023년 7월 18일

Go

목록 보기
5/6
  • 구현
package gob

import (
	"bytes"
	"encoding/gob"
)

func Marshal(v interface{}) ([]byte, error) {
	buffer := bytes.NewBuffer([]byte{})
	if err := gob.NewEncoder(buffer).Encode(v); err != nil {
		return nil, err
	}
	return buffer.Bytes(), nil
}

func Unmarshal(v []byte, dest interface{}) error {
	buffer := bytes.NewBuffer(v)
	return gob.NewDecoder(buffer).Decode(dest)
}
  • 주의: export 되지 않은 필드 (필드명이 대문자로 시작하지 않는 필드) 는 복사되지 않음

  • 테스트 코드

package gob

import (
	"errors"
	"testing"
)

func TestMarshal(t *testing.T) {
	type Lion struct {
		Name string
	}
	lion := &Lion{Name: "hello"}
	if _, err := Marshal(lion); err != nil {
		t.Error(err.Error())
	}
}

func TestUnmarshal(t *testing.T) {
	type Lion struct {
		Name string
	}
	lion1 := &Lion{Name: "hello"}
	lionBytes, err := Marshal(lion1)
	if err != nil {
		t.Error(err.Error())
	}
	lion2 := new(Lion)
	if err := Unmarshal(lionBytes, lion2); err != nil {
		t.Error(err.Error())
		return
	}
	if lion1.Name != lion2.Name {
		t.Error(errors.New("invalid name value"))
	}
}
profile
시간이 만든 코드

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

정보가 많아서 도움이 많이 됐습니다.

답글 달기