diff --git a/tutorial/go/src/client.go b/tutorial/go/src/client.go
index 543d7fb..31376f8 100644
--- a/tutorial/go/src/client.go
+++ b/tutorial/go/src/client.go
@@ -20,10 +20,10 @@
  */
 
 import (
+	"crypto/tls"
 	"fmt"
 	"git.apache.org/thrift.git/lib/go/thrift"
 	"tutorial"
-	"crypto/tls"
 )
 
 func handleClient(client *tutorial.CalculatorClient) (err error) {
@@ -37,12 +37,12 @@
 	work.Op = tutorial.Operation_DIVIDE
 	work.Num1 = 1
 	work.Num2 = 0
-	quotient, ouch, err := client.Calculate(1, work)
+	quotient, err := client.Calculate(1, work)
 	if err != nil {
 		fmt.Println("Error during operation:", err)
 		return err
-	} else if ouch != nil {
-		fmt.Println("Invalid operation:", ouch)
+	//} else if ouch != nil {
+	//	fmt.Println("Invalid operation:", ouch)
 	} else {
 		fmt.Println("Whoa we can divide by 0 with new value:", quotient)
 	}
@@ -50,12 +50,12 @@
 	work.Op = tutorial.Operation_SUBTRACT
 	work.Num1 = 15
 	work.Num2 = 10
-	diff, ouch, err := client.Calculate(1, work)
+	diff, err := client.Calculate(1, work)
 	if err != nil {
 		fmt.Println("Error during operation:", err)
 		return err
-	} else if ouch != nil {
-		fmt.Println("Invalid operation:", ouch)
+	//} else if ouch != nil {
+	//	fmt.Println("Invalid operation:", ouch)
 	} else {
 		fmt.Print("15-10=", diff, "\n")
 	}
diff --git a/tutorial/go/src/handler.go b/tutorial/go/src/handler.go
index 3d4c18c..fb0daef 100644
--- a/tutorial/go/src/handler.go
+++ b/tutorial/go/src/handler.go
@@ -44,7 +44,7 @@
 	return num1 + num2, nil
 }
 
-func (p *CalculatorHandler) Calculate(logid int32, w *tutorial.Work) (val int32, ouch *tutorial.InvalidOperation, err error) {
+func (p *CalculatorHandler) Calculate(logid int32, w *tutorial.Work) (val int32, err error) {
 	fmt.Print("calculate(", logid, ", {", w.Op, ",", w.Num1, ",", w.Num2, "})\n")
 	switch w.Op {
 	case tutorial.Operation_ADD:
@@ -58,17 +58,19 @@
 		break
 	case tutorial.Operation_DIVIDE:
 		if w.Num2 == 0 {
-			ouch = tutorial.NewInvalidOperation()
+			ouch := tutorial.NewInvalidOperation()
 			ouch.What = int32(w.Op)
 			ouch.Why = "Cannot divide by 0"
+			err = ouch
 			return
 		}
 		val = w.Num1 / w.Num2
 		break
 	default:
-		ouch = tutorial.NewInvalidOperation()
+		ouch := tutorial.NewInvalidOperation()
 		ouch.What = int32(w.Op)
 		ouch.Why = "Unknown operation"
+		err = ouch
 		return
 	}
 	entry := shared.NewSharedStruct()
@@ -84,7 +86,7 @@
 	   }
 	*/
 	p.log[k] = entry
-	return val, ouch, err
+	return val, err
 }
 
 func (p *CalculatorHandler) GetStruct(key int32) (*shared.SharedStruct, error) {
diff --git a/tutorial/go/src/server.go b/tutorial/go/src/server.go
index ebcfe5b..e4c4b97 100644
--- a/tutorial/go/src/server.go
+++ b/tutorial/go/src/server.go
@@ -20,10 +20,10 @@
  */
 
 import (
+	"crypto/tls"
 	"fmt"
 	"git.apache.org/thrift.git/lib/go/thrift"
 	"tutorial"
-	"crypto/tls"
 )
 
 func runServer(transportFactory thrift.TTransportFactory, protocolFactory thrift.TProtocolFactory, addr string, secure bool) error {
