THRIFT-2278 Buffered transport doesn't support writes > buffer size

Patch: Matt Jones
diff --git a/lib/go/thrift/buffered_transport.go b/lib/go/thrift/buffered_transport.go
index e3546a5..b92261c 100644
--- a/lib/go/thrift/buffered_transport.go
+++ b/lib/go/thrift/buffered_transport.go
@@ -77,12 +77,21 @@
 
 func (p *TBufferedTransport) Write(buf []byte) (n int, err error) {
 	wbuf := p.wbuf
-	size := len(buf)
-	if wbuf.pos+size > wbuf.limit { // buffer is full, flush buffer
-		p.Flush()
+	remaining := len(buf)
+
+	for remaining > 0 {
+		if wbuf.pos+remaining > wbuf.limit { // buffer is full, flush buffer
+			if err := p.Flush(); err != nil {
+				return n, err
+			}
+		}
+		copied := copy(wbuf.buffer[wbuf.pos:], buf[n:])
+
+		wbuf.pos += copied
+		n += copied
+		remaining -= copied
 	}
-	n = copy(wbuf.buffer[wbuf.pos:], buf)
-	wbuf.pos += n
+
 	return n, nil
 }
 
diff --git a/lib/go/thrift/framed_transport.go b/lib/go/thrift/framed_transport.go
index 3a59e7b..d1af028 100644
--- a/lib/go/thrift/framed_transport.go
+++ b/lib/go/thrift/framed_transport.go
@@ -95,7 +95,7 @@
 	}
 	if size > 0 {
 		if n, err := p.writeBuffer.WriteTo(p.transport); err != nil {
-			print("Error while flushing write buffer of size ", size, " to transport, only wrote ", n, " bytes: ", err, "\n")
+			print("Error while flushing write buffer of size ", size, " to transport, only wrote ", n, " bytes: ", err.Error(), "\n")
 			return NewTTransportExceptionFromError(err)
 		}
 	}