support goctl version to 1.1.3
This commit is contained in:
		@@ -79,5 +79,5 @@ $ GO111MODULE=on GOPROXY=https://goproxy.cn/,direct go get -u github.com/zeromic
 | 
				
			|||||||
    ```
 | 
					    ```
 | 
				
			||||||
* 生成swagger.json 文件
 | 
					* 生成swagger.json 文件
 | 
				
			||||||
    ```shell script
 | 
					    ```shell script
 | 
				
			||||||
    $ goctl api plugin -plugin goctl-swagger="swagger" -api user.api -dir .
 | 
					    $ goctl api plugin -plugin goctl-swagger="swagger -filename user.json" -api user.api -dir .
 | 
				
			||||||
    ```
 | 
					    ```
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,32 +1,22 @@
 | 
				
			|||||||
package action
 | 
					package action
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"encoding/json"
 | 
						plugin2 "github.com/tal-tech/go-zero/tools/goctl/plugin"
 | 
				
			||||||
	"github.com/urfave/cli/v2"
 | 
						"github.com/urfave/cli/v2"
 | 
				
			||||||
	"github.com/zeromicro/goctl-swagger/generate"
 | 
						"github.com/zeromicro/goctl-swagger/generate"
 | 
				
			||||||
	"io/ioutil"
 | 
					 | 
				
			||||||
	"os"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Generator(ctx *cli.Context) error {
 | 
					func Generator(ctx *cli.Context) error {
 | 
				
			||||||
	pkg := ctx.String("package")
 | 
					
 | 
				
			||||||
	fileName := ctx.String("filename")
 | 
						fileName := ctx.String("filename")
 | 
				
			||||||
	std, err := ioutil.ReadAll(os.Stdin)
 | 
					
 | 
				
			||||||
 | 
						if len(fileName) == 0 {
 | 
				
			||||||
 | 
							fileName = "rest.swagger.json"
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						p, err := plugin2.NewPlugin()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						return generate.Do(fileName, p)
 | 
				
			||||||
	var plugin generate.Plugin
 | 
					 | 
				
			||||||
	plugin.ParentPackage = pkg
 | 
					 | 
				
			||||||
	plugin.FileName = fileName
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if len(plugin.FileName) == 0 {
 | 
					 | 
				
			||||||
		plugin.FileName = "rest.swagger.json"
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	err = json.Unmarshal(std, &plugin)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return generate.Do(plugin)
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,20 +4,9 @@ import (
 | 
				
			|||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor"
 | 
						"github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway/descriptor"
 | 
				
			||||||
	"github.com/tal-tech/go-zero/tools/goctl/api/spec"
 | 
					 | 
				
			||||||
	"reflect"
 | 
						"reflect"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type (
 | 
					 | 
				
			||||||
	Plugin struct {
 | 
					 | 
				
			||||||
		Api           *spec.ApiSpec
 | 
					 | 
				
			||||||
		Style         string
 | 
					 | 
				
			||||||
		Dir           string
 | 
					 | 
				
			||||||
		ParentPackage string
 | 
					 | 
				
			||||||
		FileName      string
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
	swaggerMapTypes = map[string]reflect.Kind{
 | 
						swaggerMapTypes = map[string]reflect.Kind{
 | 
				
			||||||
		"string":   reflect.String,
 | 
							"string":   reflect.String,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,10 +4,11 @@ import (
 | 
				
			|||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						plugin2 "github.com/tal-tech/go-zero/tools/goctl/plugin"
 | 
				
			||||||
	"io/ioutil"
 | 
						"io/ioutil"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Do(in Plugin) error {
 | 
					func Do(filename string, in *plugin2.Plugin) error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	swagger, err := applyGenerate(in)
 | 
						swagger, err := applyGenerate(in)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -21,7 +22,7 @@ func Do(in Plugin) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	output := in.Dir + "/" + in.FileName
 | 
						output := in.Dir + "/" + filename
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = ioutil.WriteFile(output, formatted.Bytes(), 0666)
 | 
						err = ioutil.WriteFile(output, formatted.Bytes(), 0666)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,6 +4,7 @@ import (
 | 
				
			|||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"github.com/tal-tech/go-zero/tools/goctl/api/spec"
 | 
						"github.com/tal-tech/go-zero/tools/goctl/api/spec"
 | 
				
			||||||
 | 
						plugin2 "github.com/tal-tech/go-zero/tools/goctl/plugin"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
	"reflect"
 | 
						"reflect"
 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
@@ -25,7 +26,10 @@ const (
 | 
				
			|||||||
	equalToken      = "="
 | 
						equalToken      = "="
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func applyGenerate(p Plugin) (*swaggerObject, error) {
 | 
					func applyGenerate(p *plugin2.Plugin) (*swaggerObject, error) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						title, _ := strconv.Unquote(p.Api.Info.Properties["title"])
 | 
				
			||||||
 | 
						version, _ := strconv.Unquote(p.Api.Info.Properties["version"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	s := swaggerObject{
 | 
						s := swaggerObject{
 | 
				
			||||||
		Swagger:           "2.0",
 | 
							Swagger:           "2.0",
 | 
				
			||||||
@@ -36,8 +40,8 @@ func applyGenerate(p Plugin) (*swaggerObject, error) {
 | 
				
			|||||||
		Definitions:       make(swaggerDefinitionsObject),
 | 
							Definitions:       make(swaggerDefinitionsObject),
 | 
				
			||||||
		StreamDefinitions: make(swaggerDefinitionsObject),
 | 
							StreamDefinitions: make(swaggerDefinitionsObject),
 | 
				
			||||||
		Info: swaggerInfoObject{
 | 
							Info: swaggerInfoObject{
 | 
				
			||||||
			Title:   p.Api.Info.Title,
 | 
								Title:   title,
 | 
				
			||||||
			Version: p.Api.Info.Version,
 | 
								Version: version,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -52,6 +56,7 @@ func applyGenerate(p Plugin) (*swaggerObject, error) {
 | 
				
			|||||||
	requestResponseRefs := refMap{}
 | 
						requestResponseRefs := refMap{}
 | 
				
			||||||
	renderServiceRoutes(p.Api.Service, p.Api.Service.Groups, s.Paths, requestResponseRefs)
 | 
						renderServiceRoutes(p.Api.Service, p.Api.Service.Groups, s.Paths, requestResponseRefs)
 | 
				
			||||||
	m := messageMap{}
 | 
						m := messageMap{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	renderReplyAsDefinition(s.Definitions, m, p.Api.Types, requestResponseRefs)
 | 
						renderReplyAsDefinition(s.Definitions, m, p.Api.Types, requestResponseRefs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return &s, nil
 | 
						return &s, nil
 | 
				
			||||||
@@ -80,14 +85,17 @@ func renderServiceRoutes(service spec.Service, groups []spec.Group, paths swagge
 | 
				
			|||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
								defineStruct, _ := route.RequestType.(spec.DefineStruct)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if strings.ToUpper(route.Method) == http.MethodGet {
 | 
								if strings.ToUpper(route.Method) == http.MethodGet {
 | 
				
			||||||
				for _, member := range route.RequestType.Members {
 | 
					
 | 
				
			||||||
 | 
									for _, member := range defineStruct.Members {
 | 
				
			||||||
					if strings.Contains(member.Tag, "path") {
 | 
										if strings.Contains(member.Tag, "path") {
 | 
				
			||||||
						continue
 | 
											continue
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					tempKind := swaggerMapTypes[strings.Replace(member.Type, "[]", "", -1)]
 | 
					
 | 
				
			||||||
					ftype, format, ok := primitiveSchema(tempKind, member.Type)
 | 
										tempKind := swaggerMapTypes[strings.Replace(member.Type.Name(), "[]", "", -1)]
 | 
				
			||||||
 | 
										ftype, format, ok := primitiveSchema(tempKind, member.Type.Name())
 | 
				
			||||||
					if !ok {
 | 
										if !ok {
 | 
				
			||||||
						ftype = tempKind.String()
 | 
											ftype = tempKind.String()
 | 
				
			||||||
						format = "UNKNOWN"
 | 
											format = "UNKNOWN"
 | 
				
			||||||
@@ -115,8 +123,9 @@ func renderServiceRoutes(service spec.Service, groups []spec.Group, paths swagge
 | 
				
			|||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				reqRef := fmt.Sprintf("#/definitions/%s", route.RequestType.Name)
 | 
									reqRef := fmt.Sprintf("#/definitions/%s", route.RequestType.Name())
 | 
				
			||||||
				if len(route.RequestType.Name) > 0 {
 | 
					
 | 
				
			||||||
 | 
									if len(route.RequestType.Name()) > 0 {
 | 
				
			||||||
					var schema = swaggerSchemaObject{
 | 
										var schema = swaggerSchemaObject{
 | 
				
			||||||
						schemaCore: schemaCore{
 | 
											schemaCore: schemaCore{
 | 
				
			||||||
							Ref: reqRef,
 | 
												Ref: reqRef,
 | 
				
			||||||
@@ -137,16 +146,16 @@ func renderServiceRoutes(service spec.Service, groups []spec.Group, paths swagge
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			desc := "A successful response."
 | 
								desc := "A successful response."
 | 
				
			||||||
			respRef := fmt.Sprintf("#/definitions/%s", route.ResponseType.Name)
 | 
								respRef := fmt.Sprintf("#/definitions/%s", route.ResponseType.Name())
 | 
				
			||||||
			if len(route.ResponseType.Name) < 1 {
 | 
					
 | 
				
			||||||
 | 
								if len(route.ResponseType.Name()) < 1 {
 | 
				
			||||||
				respRef = ""
 | 
									respRef = ""
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			tags := service.Name
 | 
								tags := service.Name
 | 
				
			||||||
			if group.Annotations != nil && len(group.Annotations) > 0 {
 | 
					
 | 
				
			||||||
				if groupName, ok := group.Annotations[0].Properties["group"]; ok {
 | 
								if value := group.GetAnnotation("group"); len(value) > 0 {
 | 
				
			||||||
					tags = groupName
 | 
									tags = value
 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			operationObject := &swaggerOperationObject{
 | 
								operationObject := &swaggerOperationObject{
 | 
				
			||||||
@@ -165,10 +174,8 @@ func renderServiceRoutes(service spec.Service, groups []spec.Group, paths swagge
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// set OperationID
 | 
								// set OperationID
 | 
				
			||||||
			for _, annotation := range route.Annotations {
 | 
								if value := route.GetAnnotation("handler"); len(value) > 0 {
 | 
				
			||||||
				if annotation.Name == "handler" {
 | 
									operationObject.OperationID = value
 | 
				
			||||||
					operationObject.OperationID = annotation.Value
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			for _, param := range operationObject.Parameters {
 | 
								for _, param := range operationObject.Parameters {
 | 
				
			||||||
@@ -177,9 +184,9 @@ func renderServiceRoutes(service spec.Service, groups []spec.Group, paths swagge
 | 
				
			|||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if len(route.Annotations) > 0 {
 | 
								if len(route.Annotation.Properties) > 0 {
 | 
				
			||||||
				operationObject.Summary, _ = strconv.Unquote(route.Annotations[0].Properties["summary"])
 | 
									operationObject.Summary, _ = strconv.Unquote(route.GetAnnotation("summary"))
 | 
				
			||||||
				operationObject.Description, _ = strconv.Unquote(route.Annotations[0].Properties["description"])
 | 
									operationObject.Description, _ = strconv.Unquote(route.GetAnnotation("description"))
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			switch strings.ToUpper(route.Method) {
 | 
								switch strings.ToUpper(route.Method) {
 | 
				
			||||||
@@ -206,9 +213,11 @@ func renderReplyAsDefinition(d swaggerDefinitionsObject, m messageMap, p []spec.
 | 
				
			|||||||
				Type: "object",
 | 
									Type: "object",
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		schema.Title = i2.Name
 | 
							defineStruct, _ := i2.(spec.DefineStruct)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for _, member := range i2.Members {
 | 
							schema.Title = defineStruct.Name()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for _, member := range defineStruct.Members {
 | 
				
			||||||
			kv := keyVal{Value: schemaOfField(member)}
 | 
								kv := keyVal{Value: schemaOfField(member)}
 | 
				
			||||||
			kv.Key = member.Name
 | 
								kv.Key = member.Name
 | 
				
			||||||
			if tag, err := member.GetPropertyName(); err == nil {
 | 
								if tag, err := member.GetPropertyName(); err == nil {
 | 
				
			||||||
@@ -237,7 +246,7 @@ func renderReplyAsDefinition(d swaggerDefinitionsObject, m messageMap, p []spec.
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		d[i2.Name] = schema
 | 
							d[i2.Name()] = schema
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -247,7 +256,7 @@ func schemaOfField(member spec.Member) swaggerSchemaObject {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	var core schemaCore
 | 
						var core schemaCore
 | 
				
			||||||
	//spew.Dump(member)
 | 
						//spew.Dump(member)
 | 
				
			||||||
	kind := swaggerMapTypes[member.Type]
 | 
						kind := swaggerMapTypes[member.Type.Name()]
 | 
				
			||||||
	var props *swaggerSchemaObjectProperties
 | 
						var props *swaggerSchemaObjectProperties
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	comment := member.GetComment()
 | 
						comment := member.GetComment()
 | 
				
			||||||
@@ -257,15 +266,15 @@ func schemaOfField(member spec.Member) swaggerSchemaObject {
 | 
				
			|||||||
	case reflect.Invalid: //[]Struct 也有可能是 Struct
 | 
						case reflect.Invalid: //[]Struct 也有可能是 Struct
 | 
				
			||||||
		// []Struct
 | 
							// []Struct
 | 
				
			||||||
		//map[ArrayType:map[Star:map[StringExpr:UserSearchReq] StringExpr:*UserSearchReq] StringExpr:[]*UserSearchReq]
 | 
							//map[ArrayType:map[Star:map[StringExpr:UserSearchReq] StringExpr:*UserSearchReq] StringExpr:[]*UserSearchReq]
 | 
				
			||||||
		refTypeName := strings.Replace(member.Type, "[", "", 1)
 | 
							refTypeName := strings.Replace(member.Type.Name(), "[", "", 1)
 | 
				
			||||||
		refTypeName = strings.Replace(refTypeName, "]", "", 1)
 | 
							refTypeName = strings.Replace(refTypeName, "]", "", 1)
 | 
				
			||||||
		refTypeName = strings.Replace(refTypeName, "*", "", 1)
 | 
							refTypeName = strings.Replace(refTypeName, "*", "", 1)
 | 
				
			||||||
		core = schemaCore{
 | 
							core = schemaCore{
 | 
				
			||||||
			Ref: "#/definitions/" + refTypeName,
 | 
								Ref: "#/definitions/" + refTypeName,
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	case reflect.Slice:
 | 
						case reflect.Slice:
 | 
				
			||||||
		tempKind := swaggerMapTypes[strings.Replace(member.Type, "[]", "", -1)]
 | 
							tempKind := swaggerMapTypes[strings.Replace(member.Type.Name(), "[]", "", -1)]
 | 
				
			||||||
		ftype, format, ok := primitiveSchema(tempKind, member.Type)
 | 
							ftype, format, ok := primitiveSchema(tempKind, member.Type.Name())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if ok {
 | 
							if ok {
 | 
				
			||||||
			core = schemaCore{Type: ftype, Format: format}
 | 
								core = schemaCore{Type: ftype, Format: format}
 | 
				
			||||||
@@ -273,7 +282,7 @@ func schemaOfField(member spec.Member) swaggerSchemaObject {
 | 
				
			|||||||
			core = schemaCore{Type: ft.String(), Format: "UNKNOWN"}
 | 
								core = schemaCore{Type: ft.String(), Format: "UNKNOWN"}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		ftype, format, ok := primitiveSchema(ft, member.Type)
 | 
							ftype, format, ok := primitiveSchema(ft, member.Type.Name())
 | 
				
			||||||
		if ok {
 | 
							if ok {
 | 
				
			||||||
			core = schemaCore{Type: ftype, Format: format}
 | 
								core = schemaCore{Type: ftype, Format: format}
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
@@ -291,7 +300,7 @@ func schemaOfField(member spec.Member) swaggerSchemaObject {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	case reflect.Invalid:
 | 
						case reflect.Invalid:
 | 
				
			||||||
		// 判断是否数组
 | 
							// 判断是否数组
 | 
				
			||||||
		if strings.HasPrefix(member.Type, "[]") {
 | 
							if strings.HasPrefix(member.Type.Name(), "[]") {
 | 
				
			||||||
			ret = swaggerSchemaObject{
 | 
								ret = swaggerSchemaObject{
 | 
				
			||||||
				schemaCore: schemaCore{
 | 
									schemaCore: schemaCore{
 | 
				
			||||||
					Type:  "array",
 | 
										Type:  "array",
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										5
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								go.mod
									
									
									
									
									
								
							@@ -3,8 +3,11 @@ module github.com/zeromicro/goctl-swagger
 | 
				
			|||||||
go 1.15
 | 
					go 1.15
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require (
 | 
					require (
 | 
				
			||||||
 | 
						github.com/antlr/antlr4 v0.0.0-20210114010855-d34d2e1c271a // indirect
 | 
				
			||||||
	github.com/davecgh/go-spew v1.1.1
 | 
						github.com/davecgh/go-spew v1.1.1
 | 
				
			||||||
	github.com/grpc-ecosystem/grpc-gateway v1.14.3
 | 
						github.com/grpc-ecosystem/grpc-gateway v1.14.3
 | 
				
			||||||
	github.com/tal-tech/go-zero v1.1.1
 | 
						github.com/iancoleman/strcase v0.1.3 // indirect
 | 
				
			||||||
 | 
						github.com/tal-tech/go-zero v1.1.4-0.20210116102411-43e712d86a40
 | 
				
			||||||
	github.com/urfave/cli/v2 v2.3.0
 | 
						github.com/urfave/cli/v2 v2.3.0
 | 
				
			||||||
 | 
						golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										19
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								go.sum
									
									
									
									
									
								
							@@ -10,6 +10,10 @@ github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRF
 | 
				
			|||||||
github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc=
 | 
					github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc=
 | 
				
			||||||
github.com/alicebob/miniredis/v2 v2.14.1/go.mod h1:uS970Sw5Gs9/iK3yBg0l9Uj9s25wXxSpQUE9EaJ/Blg=
 | 
					github.com/alicebob/miniredis/v2 v2.14.1/go.mod h1:uS970Sw5Gs9/iK3yBg0l9Uj9s25wXxSpQUE9EaJ/Blg=
 | 
				
			||||||
github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q=
 | 
					github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q=
 | 
				
			||||||
 | 
					github.com/antlr/antlr4 v0.0.0-20210105212045-464bcbc32de2 h1:rL2miklL5rhxUaZO7hntBcy/VHaiyuPQ4EJoy/NMwaM=
 | 
				
			||||||
 | 
					github.com/antlr/antlr4 v0.0.0-20210105212045-464bcbc32de2/go.mod h1:T7PbCXFs94rrTttyxjbyT5+/1V8T2TYDejxUfHJjw1Y=
 | 
				
			||||||
 | 
					github.com/antlr/antlr4 v0.0.0-20210114010855-d34d2e1c271a h1:gXj02obcEEw9NVyvbn4PGQn1pPX3s7rCetf3Pzue/6U=
 | 
				
			||||||
 | 
					github.com/antlr/antlr4 v0.0.0-20210114010855-d34d2e1c271a/go.mod h1:T7PbCXFs94rrTttyxjbyT5+/1V8T2TYDejxUfHJjw1Y=
 | 
				
			||||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
 | 
					github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
 | 
				
			||||||
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
 | 
					github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
 | 
				
			||||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
 | 
					github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
 | 
				
			||||||
@@ -37,6 +41,7 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
 | 
				
			|||||||
github.com/dchest/siphash v1.2.1/go.mod h1:q+IRvb2gOSrUnYoPqHiyHXS0FOBBOdl6tONBlVnOnt4=
 | 
					github.com/dchest/siphash v1.2.1/go.mod h1:q+IRvb2gOSrUnYoPqHiyHXS0FOBBOdl6tONBlVnOnt4=
 | 
				
			||||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
 | 
					github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
 | 
				
			||||||
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
 | 
					github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
 | 
				
			||||||
 | 
					github.com/emicklei/proto v1.9.0 h1:l0QiNT6Qs7Yj0Mb4X6dnWBQer4ebei2BFcgQLbGqUDc=
 | 
				
			||||||
github.com/emicklei/proto v1.9.0/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A=
 | 
					github.com/emicklei/proto v1.9.0/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A=
 | 
				
			||||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 | 
					github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 | 
				
			||||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 | 
					github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 | 
				
			||||||
@@ -58,6 +63,7 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V
 | 
				
			|||||||
github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8=
 | 
					github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8=
 | 
				
			||||||
github.com/go-redis/redis v6.15.7+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
 | 
					github.com/go-redis/redis v6.15.7+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
 | 
				
			||||||
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
 | 
					github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
 | 
				
			||||||
 | 
					github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
 | 
				
			||||||
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 | 
					github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 | 
				
			||||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 | 
					github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 | 
				
			||||||
github.com/go-xorm/builder v0.3.4/go.mod h1:KxkQkNN1DpPKTedxXyTQcmH+rXfvk4LZ9SOOBoZBAxw=
 | 
					github.com/go-xorm/builder v0.3.4/go.mod h1:KxkQkNN1DpPKTedxXyTQcmH+rXfvk4LZ9SOOBoZBAxw=
 | 
				
			||||||
@@ -106,7 +112,10 @@ github.com/grpc-ecosystem/grpc-gateway v1.14.3 h1:OCJlWkOUoTnl0neNGlf4fUm3TmbEtg
 | 
				
			|||||||
github.com/grpc-ecosystem/grpc-gateway v1.14.3/go.mod h1:6CwZWGDSPRJidgKAtJVvND6soZe6fT7iteq8wDPdhb0=
 | 
					github.com/grpc-ecosystem/grpc-gateway v1.14.3/go.mod h1:6CwZWGDSPRJidgKAtJVvND6soZe6fT7iteq8wDPdhb0=
 | 
				
			||||||
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI=
 | 
					github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI=
 | 
				
			||||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 | 
					github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 | 
				
			||||||
 | 
					github.com/iancoleman/strcase v0.1.2 h1:gnomlvw9tnV3ITTAxzKSgTF+8kFWcU/f+TgttpXGz1U=
 | 
				
			||||||
github.com/iancoleman/strcase v0.1.2/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE=
 | 
					github.com/iancoleman/strcase v0.1.2/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE=
 | 
				
			||||||
 | 
					github.com/iancoleman/strcase v0.1.3 h1:dJBk1m2/qjL1twPLf68JND55vvivMupZ4wIzE8CTdBw=
 | 
				
			||||||
 | 
					github.com/iancoleman/strcase v0.1.3/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE=
 | 
				
			||||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
 | 
					github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
 | 
				
			||||||
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
 | 
					github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
 | 
				
			||||||
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
 | 
					github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
 | 
				
			||||||
@@ -190,6 +199,7 @@ github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeV
 | 
				
			|||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
 | 
					github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
 | 
				
			||||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 | 
					github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 | 
				
			||||||
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
 | 
					github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
 | 
				
			||||||
 | 
					github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
 | 
				
			||||||
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
 | 
					github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
 | 
				
			||||||
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
 | 
					github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
 | 
				
			||||||
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 | 
					github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 | 
				
			||||||
@@ -200,8 +210,10 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
 | 
				
			|||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 | 
					github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 | 
				
			||||||
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
 | 
					github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
 | 
				
			||||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
 | 
					github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
 | 
				
			||||||
github.com/tal-tech/go-zero v1.1.1 h1:tAqomwNk/sxbvvflKyA87t3ndn017l3g6ZHm4pMZ1vo=
 | 
					github.com/tal-tech/go-zero v1.1.3 h1:Rp87YwSUJO3aRaEKcpi5OILBjYT8iQZ4P35ZcqKTY5w=
 | 
				
			||||||
github.com/tal-tech/go-zero v1.1.1/go.mod h1:lzBHtH8qAplwP1culBv1vsfrYpVQSAgAM4wNRDmQgPA=
 | 
					github.com/tal-tech/go-zero v1.1.3/go.mod h1:LuYkWF2BE2O/TB9IS+zC86oE1hhS6Ty4yGSBh+JKPaY=
 | 
				
			||||||
 | 
					github.com/tal-tech/go-zero v1.1.4-0.20210116102411-43e712d86a40 h1:UnuThXEvWg9TqwF6qg+JqFwaKgAI0DwjnM35o7X5DE4=
 | 
				
			||||||
 | 
					github.com/tal-tech/go-zero v1.1.4-0.20210116102411-43e712d86a40/go.mod h1:LuYkWF2BE2O/TB9IS+zC86oE1hhS6Ty4yGSBh+JKPaY=
 | 
				
			||||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 | 
					github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 | 
				
			||||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20171017195756-830351dc03c6/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 | 
					github.com/tmc/grpc-websocket-proxy v0.0.0-20171017195756-830351dc03c6/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 | 
				
			||||||
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
 | 
					github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
 | 
				
			||||||
@@ -211,12 +223,14 @@ github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M=
 | 
				
			|||||||
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
 | 
					github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
 | 
				
			||||||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 | 
					github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 | 
				
			||||||
github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg=
 | 
					github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg=
 | 
				
			||||||
 | 
					github.com/xwb1989/sqlparser v0.0.0-20180606152119-120387863bf2 h1:zzrxE1FKn5ryBNl9eKOeqQ58Y/Qpo3Q9QNxKHX5uzzQ=
 | 
				
			||||||
github.com/xwb1989/sqlparser v0.0.0-20180606152119-120387863bf2/go.mod h1:hzfGeIUDq/j97IG+FhNqkowIyEcD88LrW6fyU3K3WqY=
 | 
					github.com/xwb1989/sqlparser v0.0.0-20180606152119-120387863bf2/go.mod h1:hzfGeIUDq/j97IG+FhNqkowIyEcD88LrW6fyU3K3WqY=
 | 
				
			||||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 | 
					github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 | 
				
			||||||
github.com/yuin/gopher-lua v0.0.0-20191220021717-ab39c6098bdb/go.mod h1:gqRgreBUhTSL0GeU64rtZ3Uq3wtjOa/TB2YfrtkCbVQ=
 | 
					github.com/yuin/gopher-lua v0.0.0-20191220021717-ab39c6098bdb/go.mod h1:gqRgreBUhTSL0GeU64rtZ3Uq3wtjOa/TB2YfrtkCbVQ=
 | 
				
			||||||
go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
 | 
					go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
 | 
				
			||||||
go.etcd.io/etcd v0.0.0-20200402134248-51bdeb39e698/go.mod h1:YoUyTScD3Vcv2RBm3eGVOq7i1ULiz3OuXoQFWOirmAM=
 | 
					go.etcd.io/etcd v0.0.0-20200402134248-51bdeb39e698/go.mod h1:YoUyTScD3Vcv2RBm3eGVOq7i1ULiz3OuXoQFWOirmAM=
 | 
				
			||||||
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
 | 
					go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
 | 
				
			||||||
 | 
					go.uber.org/automaxprocs v1.3.0 h1:II28aZoGdaglS5vVNnspf28lnZpXScxtIozx1lAjdb0=
 | 
				
			||||||
go.uber.org/automaxprocs v1.3.0/go.mod h1:9CWT6lKIep8U41DDaPiH6eFscnTyjfTANNQNx6LrIcA=
 | 
					go.uber.org/automaxprocs v1.3.0/go.mod h1:9CWT6lKIep8U41DDaPiH6eFscnTyjfTANNQNx6LrIcA=
 | 
				
			||||||
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
 | 
					go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
 | 
				
			||||||
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
 | 
					go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
 | 
				
			||||||
@@ -303,6 +317,7 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T
 | 
				
			|||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
					golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
 | 
				
			||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
					golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
				
			||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 | 
					google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 | 
				
			||||||
 | 
					google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
 | 
				
			||||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 | 
					google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 | 
				
			||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
 | 
					google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
 | 
				
			||||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
 | 
					google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user