Browse Source

refactor(json): make jsonite optional with build tags (#1026)

* refactor(json): Restore gin support for app engine

Create new folder to support multiple json package.
restore gin support for app engine (disable jsonite through tags)

use jsoniter

$ go build -tags=jsoniter .

use default json

$ go build .

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>

* rename json file.

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>

* docs(json): add build tags document.

* fix(docs): markdown format.

* fix(json): missing space.
Bo-Yi Wu 8 years ago
parent
commit
ce670a6497
7 changed files with 47 additions and 9 deletions
  1. 8 1
      README.md
  2. 1 2
      binding/json.go
  3. 1 3
      errors.go
  4. 1 0
      errors_test.go
  5. 17 0
      json/json.go
  6. 18 0
      json/jsoniter.go
  7. 1 3
      render/json.go

+ 8 - 1
README.md

@@ -88,7 +88,6 @@ BenchmarkZeus_GithubAll 		| 2000 		| 944234 	| 300688 	| 2648
 - [x] Battle tested
 - [x] API frozen, new releases will not break your code.
 
-
 ## Start using it
 
 1. Download and install it:
@@ -141,6 +140,14 @@ $ curl https://raw.githubusercontent.com/gin-gonic/gin/master/examples/basic/mai
 $ go run main.go
 ```
 
+## Build with [jsoniter](https://github.com/json-iterator/go)
+
+Gin use `encoding/json` as default json package but you can change to [jsoniter](https://github.com/json-iterator/go) by build from other tags.
+
+```sh
+$ go build -tags=jsoniter .
+```
+
 ## API Examples
 
 ### Using GET, POST, PUT, PATCH, DELETE and OPTIONS

+ 1 - 2
binding/json.go

@@ -7,11 +7,10 @@ package binding
 import (
 	"net/http"
 
-	"github.com/json-iterator/go"
+	"github.com/gin-gonic/gin/json"
 )
 
 var (
-	json                   = jsoniter.ConfigCompatibleWithStandardLibrary
 	EnableDecoderUseNumber = false
 )
 

+ 1 - 3
errors.go

@@ -9,11 +9,9 @@ import (
 	"fmt"
 	"reflect"
 
-	"github.com/json-iterator/go"
+	"github.com/gin-gonic/gin/json"
 )
 
-var json = jsoniter.ConfigCompatibleWithStandardLibrary
-
 type ErrorType uint64
 
 const (

+ 1 - 0
errors_test.go

@@ -8,6 +8,7 @@ import (
 	"errors"
 	"testing"
 
+	"github.com/gin-gonic/gin/json"
 	"github.com/stretchr/testify/assert"
 )
 

+ 17 - 0
json/json.go

@@ -0,0 +1,17 @@
+// Copyright 2017 Bo-Yi Wu.  All rights reserved.
+// Use of this source code is governed by a MIT style
+// license that can be found in the LICENSE file.
+
+// +build !jsoniter
+
+package json
+
+import (
+	"encoding/json"
+)
+
+var (
+	Marshal       = json.Marshal
+	MarshalIndent = json.MarshalIndent
+	NewDecoder    = json.NewDecoder
+)

+ 18 - 0
json/jsoniter.go

@@ -0,0 +1,18 @@
+// Copyright 2017 Bo-Yi Wu.  All rights reserved.
+// Use of this source code is governed by a MIT style
+// license that can be found in the LICENSE file.
+
+// +build jsoniter
+
+package json
+
+import (
+	"github.com/json-iterator/go"
+)
+
+var (
+	json          = jsoniter.ConfigCompatibleWithStandardLibrary
+	Marshal       = json.Marshal
+	MarshalIndent = json.MarshalIndent
+	NewDecoder    = json.NewDecoder
+)

+ 1 - 3
render/json.go

@@ -8,11 +8,9 @@ import (
 	"bytes"
 	"net/http"
 
-	"github.com/json-iterator/go"
+	"github.com/gin-gonic/gin/json"
 )
 
-var json = jsoniter.ConfigCompatibleWithStandardLibrary
-
 type JSON struct {
 	Data interface{}
 }