gpt4 book ai didi

go - 加载多个 gojsonschemas 供以后使用

转载 作者:数据小太阳 更新时间:2023-10-29 03:12:20 26 4
gpt4 key购买 nike

我正在尝试为我的其余 API 管理 json 验证。我决定使用 github.com/xeipuuv/gojsonschema 包来实现。

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,
}
}

关于如何解决上述问题的任何提示/技巧?

最佳答案

根据@marc 的回复,您只需使用 JSONLoader 接口(interface)即可:

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

在 Go 中,任何变量/类型/函数/等等。以小写字母开头的是“私有(private)的”,因此在该包之外是不可见的。由于您的代码不是 gojsonschema 包的一部分,因此您无法访问该类型。

这是 Go Tour 中的示例: https://tour.golang.org/basics/3

关于go - 加载多个 gojsonschemas 供以后使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48042754/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com