2017-12-31 149 views
0

私は残りのAPIのjson検証を管理しようとしています。私はgithub.com/xeipuuv/gojsonschemaパッケージを使用して実装することを決めました。複数のgojsonschemasを後で使用するためにロードする

func (a Auth) Login(w http.ResponseWriter, r *http.Request) { 

    bodyBytes, err := ioutil.ReadAll(r.Body) 
    if err != nil { 
     w.WriteHeader(http.StatusBadRequest) 
     return 
    } 

    cwd, _ := os.Getwd() 
    src := "file://" + cwd + "/schemas/auth.json" 

    schemaLoader := gojsonschema.NewReferenceLoader(src) 
    ... 

上記はうまく動作しますが、すべてのAPIリクエストでスキーマを読み込む必要があるため、うれしいです。

私のアプリの設定では、後で使うためにすべてのスキーマをスキーマのマップにロードしたいと思っています。

package schemas 

import (
    "os" 
    "path/filepath" 
    "strings" 

    "github.com/xeipuuv/gojsonschema" 
) 

const ext = ".json" 

func LoadSchemas() error { 
    pathS, err := os.Getwd() 
    if err != nil { 
     return err 
    } 

    var files = make(map[string]*gojsonschema.jsonReferenceLoader) // This is where I am stuck... 
    filepath.Walk(pathS+"/schemas", func(path string, f os.FileInfo, _ error) error { 
     if !f.IsDir() { 
      if filepath.Ext(path) == ext { 
       key := strings.TrimRight(f.Name(), ext) 
       files[key] = gojsonschema.NewReferenceLoader("file://" + path) 
      } 
     } 
     return nil 
    }) 

    return nil 
} 

gojsonschema.NewReferenceLoader("file://" + path)戻り*jsonReferenceLoader - jsonReferenceLoaderがパッケージ外に輸出されていません。

// NewReferenceLoader returns a JSON reference loader using the given source and the local OS file system. 
func NewReferenceLoader(source string) *jsonReferenceLoader { 
    return &jsonReferenceLoader{ 
     fs:  osFS, 
     source: source, 
    } 
} 

上記の問題を解決するためのヒントやヒントはありますか?

+1

、それはあなたが必要とするすべてでなければなりませんそれと相互作用する。 – Marc

+0

@Marc - あなたは答えに例を挙げることができますか?私は答えとしてそれを受け入れることができますか? – Gravy

答えて

1

@マークの応答から、あなただけの代わりにJSONLoaderインタフェースを使用します。ゴーで

var files = make(map[string]gojsonschema.JSONLoader) 

を、任意の変数/タイプ/機能/など。小文字で始まる文字は「プライベート」なので、そのパッケージの外には見えません。あなたのコードはgojsonschemaパッケージの一部ではないので、そのタイプにアクセスすることはできません。ここで

は行くツアーに例を示しますjsonReferenceLoaderは[JSONLoader](https://godoc.org/github.com/xeipuuv/gojsonschema#JSONLoader)インタフェースを実装 https://tour.golang.org/basics/3

関連する問題