Cue 加载

加载和打印 CUE 代码

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


package main

import (


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)

		// 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())

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

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



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