THRIFT-625: Add support for 'Go'; provided by Aalok Shah.
git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1072478 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/tutorial/go/src/main.go b/tutorial/go/src/main.go
new file mode 100644
index 0000000..30b5d52
--- /dev/null
+++ b/tutorial/go/src/main.go
@@ -0,0 +1,86 @@
+package main;
+
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+import (
+ "flag"
+ "fmt"
+ "os"
+ "thrift"
+)
+
+func Usage() {
+ fmt.Fprint(os.Stderr, "Usage of ", os.Args[0], " <--server | --client>:\n")
+ flag.PrintDefaults()
+ fmt.Fprint(os.Stderr, "\n")
+ os.Exit(0)
+}
+
+func main() {
+ flag.Usage = Usage
+ var client bool
+ var server bool
+ var protocol string
+ var framed bool
+ var useHttp bool
+ var help bool
+
+ flag.BoolVar(&client, "client", false, "Run client")
+ flag.BoolVar(&server, "server", false, "Run server")
+ flag.StringVar(&protocol, "P", "binary", "Specify the protocol (binary, compact, simplejson)")
+ flag.BoolVar(&framed, "framed", false, "Use framed transport")
+ flag.BoolVar(&useHttp, "http", false, "Use http")
+ flag.BoolVar(&help, "help", false, "See usage string")
+ flag.Parse()
+ if help || (client && server) || !(client || server) {
+ fmt.Print("flag.NArg() == ", flag.NArg(), "\n")
+ flag.Usage()
+ }
+ var protocolFactory thrift.TProtocolFactory
+ switch protocol {
+ case "compact":
+ protocolFactory = thrift.NewTCompactProtocolFactory()
+ case "simplejson":
+ protocolFactory = thrift.NewTSimpleJSONProtocolFactory()
+ case "json":
+ protocolFactory = thrift.NewTJSONProtocolFactory()
+ case "binary", "":
+ protocolFactory = thrift.NewTBinaryProtocolFactoryDefault()
+ default:
+ fmt.Fprint(os.Stderr, "Invalid protocol specified", protocol, "\n")
+ Usage()
+ os.Exit(1)
+ }
+ transportFactory := thrift.NewTTransportFactory()
+ if framed {
+ transportFactory = thrift.NewTFramedTransportFactory(transportFactory)
+ }
+
+ if(client) {
+ RunClient(transportFactory, protocolFactory)
+ } else if(server) {
+ RunServer(transportFactory, protocolFactory)
+ } else {
+ flag.Usage()
+ }
+ os.Exit(0)
+}