package main
import (
"encoding/gob"
"fmt"
)
type Buf struct {
buf []byte
pos int
}
func NewBuf() *Buf {
return &Buf{make([]byte, 0), 0}
}
func (b *Buf) Write(p []byte) (n int, err error) {
b.buf = append(b.buf, p...)
n = len(p)
return
}
func (b *Buf) Read(p []byte) (n int, err error) {
for n = 0; n < len(p) && b.pos < len(b.buf); {
p[n] = b.buf[b.pos]
n++
b.pos++
}
return
}
func main() {
buf := NewBuf()
e := gob.NewEncoder(buf)
e.Encode("asdf")
e.Encode(1)
e.Encode(2)
var s string
var i int
var err error
d := gob.NewDecoder(buf)
err = d.Decode(&s)
fmt.Println(s, err)
err = d.Decode(&i)
fmt.Println(i, err)
err = d.Decode(i)
fmt.Println(i, err)
err = d.Decode(&i)
fmt.Println(i, err)
}