Cue 加载



加载和打印 CUE 代码

这是第一个例子,演示如何加载打印和验证 CUE

simple.go

package main

import (
	"fmt"

	"cuelang.org/go/cue/cuecontext"
	"cuelang.org/go/cue/load"
)

func main() {
	// We need a cue.Context, the New'd return is ready to use
	ctx := cuecontext.New()

	// The entrypoints are the same as the files you'd specify at the command line
	entrypoints := []string{"hello.cue"}

	// Load Cue files into Cue build.Instances slice
	// the second arg is a configuration object, we'll see this later
	bis := load.Instances(entrypoints, nil)

	// Loop over the instances, checking for errors and printing
	for _, bi := range bis {
		// check for errors on the instance
		// these are typically parsing errors
		if bi.Err != nil {
			fmt.Println("Error during load:", bi.Err)
			continue
		}

		// Use cue.Context to turn build.Instance to cue.Instance
		value := ctx.BuildInstance(bi)
		if value.Err() != nil {
			fmt.Println("Error during build:", value.Err())
			continue
		}

		// print the error
		fmt.Println("root value:", value)

		// Validate the value
		err := value.Validate()
		if err != nil {
			fmt.Println("Error during validate:", err)
			continue
		}
	}

}

hello.cue

package hello

hello: "world"

#A: {
	foo: string
}

// to cause a load error, remove the '&'
// to cause a build error, change '#A' to '#B'
// to cause a validation error, change foo to '1'
a: #A & {
	foo: "bar"
}

go run fields.go


加载的配置

CUE 的 load.Instances 接受传入第二个参数用来配置选项。 在 CLI 中不同的命令,标志(flag)和参数就是用来配置这些选项的。 当用 Go 来加载时,我们可以设置 Config 对象来设置这些选项。

load.Config documentation

注释里解释了如何使用这些选项。 一旦你更加了解 CUE,你就知道 他们中大多数用于高级用例,那时候会更有意义 其他的你已在 CLI 的 flag 里看过了。

我们绝不会将你的邮箱分享给任何人。
2022 Hofstadter, Inc