THRIFT-2502 Optimize go implementations of binary and compact protocols for speed
Client: Go
Patch: Aleksey Pesternikov

This closes #110

commit 7ece8e6f16f7ff46cda4b896215d595ac986d332
 Author: Aleksey Pesternikov <ap@alekseys-macbook-pro.local>
 Date: 2014-04-26T17:45:12Z

simplify buffered transport by reusing bufio

commit 814b661d7e5c3c27ad4035a42925eae619447ee3
 Author: Aleksey Pesternikov <ap@alekseys-macbook-pro.local>
 Date: 2014-04-26T18:05:12Z

zero-initialize buffers in framed transport

commit 0f576138e24fae8e7f8d210cfb480889a41d1d9a
 Author: Aleksey Pesternikov <ap@alekseys-macbook-pro.local>
 Date: 2014-04-26T19:19:39Z

do not buffer the whole frame while reading in framed transport
 reuse frame header buffer

commit 4db9b65458eb34e1b1676dba76d1e664c6339a57
 Author: Aleksey Pesternikov <ap@alekseys-macbook-pro.local>
 Date: 2014-04-26T19:43:07Z

enforce max frame size in framed transport

commit 58ecc23ec1a2176f7dc5db7a658a51817dc626e6
 Author: Aleksey Pesternikov <ap@alekseys-mbp.att.net>
 Date: 2014-04-27T00:31:16Z

microbenchmarks for serialization/deserialization (binary,compact)x(memoryBuffer,Stream,framedMemoryBuffer)x(bool,byte,i16,i32,i64,double,string,binary)

commit 156116f484db513251e0e6c65942466ed5a8142c
 Author: Aleksey Pesternikov <ap@alekseys-mbp.att.net>
 Date: 2014-04-27T00:32:09Z

Merge branch 'go_microbench' into go_simplify_and_optimize

commit 1c27c0913cf5a8c0352afff1dae9e9fc9f758409
 Author: Aleksey Pesternikov <ap@alekseys-macbook-pro.local>
 Date: 2014-04-27T22:45:52Z

do not allocate buffer in TBinaryProtocol.WriteByte

commit 86addfb0585e04c648cde1b9cb1566d7976f8cda
 Author: Aleksey Pesternikov <ap@alekseys-mbp.att.net>
 Date: 2014-04-27T23:46:12Z

no extra alloc in double marshaling test

commit 98ac62b0a80d4f27dce736b561005953cb915a90
 Author: Aleksey Pesternikov <ap@alekseys-mbp.att.net>
 Date: 2014-04-27T23:46:50Z

Merge branch 'go_microbench' into go_simplify_and_optimize

commit 76c26624578a5455cacd08bb0167444748aaa41d
 Author: Aleksey Pesternikov <ap@alekseys-mbp.att.net>
 Date: 2014-04-28T12:48:41Z

optimized ReadByte, WriteByte

commit 5a79d81d326582dbbdcf523ebc0180390ac24497
 Author: Aleksey Pesternikov <ap@alekseys-mbp.att.net>
 Date: 2014-04-28T13:03:26Z

optimized WriteString

commit f6d4a9aa65434831cbd2993148fa12c12b2a342c
 Author: Aleksey Pesternikov <ap@alekseys-macbook-pro.local>
 Date: 2014-04-28T15:35:06Z

compact protocol optimization

commit 03bdb6b9f097a47ef54826483867c23d49374ac0
 Author: Aleksey Pesternikov <ap@alekseys-macbook-pro.local>
 Date: 2014-04-28T16:08:52Z

cache reader and writer to aviod interface conversions
diff --git a/lib/go/thrift/protocol_test.go b/lib/go/thrift/protocol_test.go
index d88afed..67048fe 100644
--- a/lib/go/thrift/protocol_test.go
+++ b/lib/go/thrift/protocol_test.go
@@ -183,7 +183,7 @@
 
 }
 
-func ReadWriteBool(t *testing.T, p TProtocol, trans TTransport) {
+func ReadWriteBool(t testing.TB, p TProtocol, trans TTransport) {
 	thetype := TType(BOOL)
 	thelen := len(BOOL_VALUES)
 	err := p.WriteListBegin(thetype, thelen)
@@ -229,7 +229,7 @@
 	}
 }
 
-func ReadWriteByte(t *testing.T, p TProtocol, trans TTransport) {
+func ReadWriteByte(t testing.TB, p TProtocol, trans TTransport) {
 	thetype := TType(BYTE)
 	thelen := len(BYTE_VALUES)
 	err := p.WriteListBegin(thetype, thelen)
@@ -278,7 +278,7 @@
 	}
 }
 
-func ReadWriteI16(t *testing.T, p TProtocol, trans TTransport) {
+func ReadWriteI16(t testing.TB, p TProtocol, trans TTransport) {
 	thetype := TType(I16)
 	thelen := len(INT16_VALUES)
 	p.WriteListBegin(thetype, thelen)
@@ -315,7 +315,7 @@
 	}
 }
 
-func ReadWriteI32(t *testing.T, p TProtocol, trans TTransport) {
+func ReadWriteI32(t testing.TB, p TProtocol, trans TTransport) {
 	thetype := TType(I32)
 	thelen := len(INT32_VALUES)
 	p.WriteListBegin(thetype, thelen)
@@ -351,7 +351,7 @@
 	}
 }
 
-func ReadWriteI64(t *testing.T, p TProtocol, trans TTransport) {
+func ReadWriteI64(t testing.TB, p TProtocol, trans TTransport) {
 	thetype := TType(I64)
 	thelen := len(INT64_VALUES)
 	p.WriteListBegin(thetype, thelen)
@@ -387,7 +387,7 @@
 	}
 }
 
-func ReadWriteDouble(t *testing.T, p TProtocol, trans TTransport) {
+func ReadWriteDouble(t testing.TB, p TProtocol, trans TTransport) {
 	thetype := TType(DOUBLE)
 	thelen := len(DOUBLE_VALUES)
 	p.WriteListBegin(thetype, thelen)
@@ -396,13 +396,9 @@
 	}
 	p.WriteListEnd()
 	p.Flush()
-	wrotebuffer := ""
-	if memtrans, ok := trans.(*TMemoryBuffer); ok {
-		wrotebuffer = memtrans.String()
-	}
 	thetype2, thelen2, err := p.ReadListBegin()
 	if err != nil {
-		t.Errorf("%s: %T %T %q Error reading list: %q, wrote: %v", "ReadWriteDouble", p, trans, err, DOUBLE_VALUES, wrotebuffer)
+		t.Errorf("%s: %T %T %q Error reading list: %q", "ReadWriteDouble", p, trans, err, DOUBLE_VALUES)
 	}
 	if thetype != thetype2 {
 		t.Errorf("%s: %T %T type %s != type %s", "ReadWriteDouble", p, trans, thetype, thetype2)
@@ -429,7 +425,7 @@
 	}
 }
 
-func ReadWriteString(t *testing.T, p TProtocol, trans TTransport) {
+func ReadWriteString(t testing.TB, p TProtocol, trans TTransport) {
 	thetype := TType(STRING)
 	thelen := len(STRING_VALUES)
 	p.WriteListBegin(thetype, thelen)
@@ -465,7 +461,7 @@
 	}
 }
 
-func ReadWriteBinary(t *testing.T, p TProtocol, trans TTransport) {
+func ReadWriteBinary(t testing.TB, p TProtocol, trans TTransport) {
 	v := protocol_bdata
 	p.WriteBinary(v)
 	p.Flush()