Skip to content

Instantly share code, notes, and snippets.

@squiidz
Created November 5, 2014 22:46
Show Gist options
  • Save squiidz/9a1aea940cfef7f9c654 to your computer and use it in GitHub Desktop.
Save squiidz/9a1aea940cfef7f9c654 to your computer and use it in GitHub Desktop.
Learn Go
package main
import (
"bytes"
"fmt"
"io"
)
type Maker interface {
WriteIn(data []byte) (int, error)
ReadOut() ([]byte, error)
}
type Duck struct {
*bytes.Buffer
}
func (d *Duck) WriteIn(data []byte) (int, error) {
n, err := d.Write(data)
if n > 0 {
return n, nil
}
return 0, err
}
func (d *Duck) ReadOut() ([]byte, error) {
p := make([]byte, d.Len())
n, err := d.Read(p)
if n > 0 {
return p, nil
}
return p, err
}
func NewDuck(d []byte) *Duck {
return &Duck{
bytes.NewBuffer(d),
}
}
func main() {
tinyDuck := NewDuck([]byte(""))
in, err := tinyDuck.WriteIn([]byte("#WriteTo data"))
if err != nil {
fmt.Println(err)
}
fmt.Println(in)
out, err := tinyDuck.ReadOut()
if err != nil {
fmt.Println(err)
}
fmt.Println(string(out))
Extract(tinyDuck)
out, _ = tinyDuck.ReadOut()
fmt.Println(string(out))
}
func ReadFrom(w io.Reader, num int) ([]byte, error) {
p := make([]byte, num)
n, err := w.Read(p)
if n > 0 {
return p[:n], nil
}
return p, err
}
func WriteTo(w io.Writer, data []byte) (int, error) {
n, err := w.Write(data)
if n > 0 {
return n, nil
}
return 0, err
}
func Extract(m ...Maker) {
for _, d := range m {
n, err := d.WriteIn([]byte("Some Data"))
if err != nil {
fmt.Println(err)
}
fmt.Println("- ", n, "Written to maker")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment