和过去的版本说再见 - KCL 语言 Go SDK 新功能速览!


KCL 是什么?

KCL 是一个开源的基于约束的记录及函数语言,期望通过成熟的编程语言技术和实践来改进对大量繁杂配置和策略的编写,致力于构建围绕配置的更好的模块化、扩展性和稳定性,更简单的逻辑编写,以及更快的自动化集成和良好的生态延展性。

KCL Go SDK 是什么?

kclvm 是一个 KCL 语言的运行时库,它提供了一个与 KCL 编译器交互的编程接口。它是一个客户端库,可用于对 KCL源代码执行各种操作,例如 执行、格式化等。KCL Go SDK是 kclvm 的 Go 语言包装,提供了 Go 语言的 SDK,方便了在云原生环境下 KCL 语言的集成。

目前,KCL Go SDK 客户端构建在 kclvm json2 rpc API 之上,这意味着它使用和其他语言的 kclvm 客户端使用的相同 API 与 KCL 源代码交互,这与其他语言的 KCL SDK 工作方式类似,但提供了更加友好的 Go 语言风格的包装。

新版本 KCL Go SDK 解决了什么问题?

KCL 作为一门配置型语言,和云原生领域有着极其紧密的联系,而另一方面,Go 语言已经成为了云原生领域通用编程语言的事实标准。在这样的背景下,开发 KCL 的 Go SDK 来完成 KCL 编译器与 Go 语言的直接交互就有了必要,这也是KCL Go SDK诞生的原因。

最初版本的 KCL 编译器及运行时使用 python 编写,由于 python 语言本身的性能问题和其动态语言的特性,初版 KCL 语言的运行速度和安全性都有很大提升空间。出于安全与效率问题的考虑,后续版本 KCL 编译器又使用了 rust 语言编写,因此新版本的KCL Go SDK基于 Rust 实现的 KCL 核心 进行包装,去除了 python 依赖,简化了安装,优化了使用体验。

新版本KCL Go SDK可以视为一个纯 Go 包使用,无需任何外置依赖,可以通过一键go install即可完成安装使用。

命令行 KCL Go SDK快速体验

KCL Go SDK提供了一个自带的 KCL Go 命令行,支持用户通过go install来一键安装 kclvm 的 Go 命令行工具 kcl-go,其要求本地 Go 版本为1.18+, 同时要求本地有完整的 CGO 工具链。

只需执行

go install kusionstack.io/kclvm-go/cmds/kcl-go@latest

新建 KCL 源文件 hello.k

apiVersion = "apps/v1"
kind = "Deployment"
metadata = {
name = "nginx"
labels.app = "nginx"
}
spec = {
replicas = 3
selector.matchLabels = metadata.labels
template.metadata.labels = metadata.labels
template.spec.containers = [
{
name = metadata.name
image = "${metadata.name}:1.14.2"
ports = [{ containerPort = 80 }]
}
]
}

之后可以直接在命令行中执行 KCL

$ kcl-go run ./hello.k 
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: "nginx:1.14.2"
ports:
- containerPort: 80

Go 代码如何集成 KCL

以上一节的 hello.k 为例,构建以下的 main.go 代码:

package main

import (
"fmt"
"kusionstack.io/kclvm-go"
)

func main() {
result := kclvm.MustRun("./hello.k").GetRawYamlResult()
fmt.Println(result)
}
  • kclvm.MustRun("./hello.k").GetRawYamlResult()运行对应的kcl源文件
  • fmt.Println(result)打印运行结果

本地环境要求 Go 版本为1.18+,与完整的 CGO 工具链。运行命令行添加 KCL Go SDK依赖

go get kusionstack.io/kclvm-go@main

执行 Go 程序,结果为:

$ go run main.go
name: kcl
age: 1
x0:
name: kcl
age: 1
x1:
name: kcl
age: 101

总结

通过这一次的 KCL Go SDK 的版本变更,我们去除了 python 依赖并切换至性能更加优秀的 rust 运行时。文章分别简单展示了如何使用 kcl-go 命令行工具执行 KCL 源代码, 以及如何将 KCL 集成至您的 Go 程序之中。

当然除了简单的编译并运行 KCL 源码之外,KCL Go SDK 还提供了丰富的功能以方便用户更好地在 Go 中集成 KCL , 包括:

  • KCL 静态错误分析(lint与格式化)
  • KCL 依赖分析、
  • Go 结构体和 KCL Schema 互相转换等等

其他资源

感谢所有 KCL 用户和社区小伙伴在此次版本更新过程中提出的宝贵反馈与建议。受限于文章篇幅,后续我们会撰写更多 KCL v0.4.6 新版本功能解读系列文章,敬请期待!

更多其他资源请参考:

  • KCL 网站
  • Kusion 网站
  • KCL Github 仓库
  • kclvm-go Github 仓库
  • Kusion Github 仓库
  • Konfig Github 仓库

欢迎加入我们的社区进行交流 👏👏👏:https://github.com/KusionStack/community 👏👏👏


相關推薦

2022-12-09

区的近期动态。 新增特性​ 自定义 YAML 格式输出​ 在过去的 KCL 版本中,YAML 输出的样式是在 KCL 编译器中是硬编码的,用户可以为 schema 的 __settings__ 元属性设置为不同的值来决定 YAML 输出样式,这带来了较高的复杂

2023-04-18

持了 KCL 错误警告在 IDE 中实时显示,以及 KCL 代码补全等新功能。 错误与告警实时显示 跳转 补全 悬停 更多 KCL VS Code 插件安装方式及详细更新内容详见 Kusion VS Code 插件 在 KCL VS Code 插件的基

2023-02-28

简介 KCL 团队很高兴地宣布 KCL v0.4.5 版本现在已经可用!本次发布主要为 KCL 语言编写便利性和稳定性提升,错误信息改进以及更多平台包括 windows 版本支持以及更多下载方式支持。在 KCL v0.4.5 版本中,用户可以通过编写更少的

2023-08-24

KCL 官网:https://kcl-lang.io 内容概述​ 感谢所有贡献者过去两周 (2023 08.10 - 08.23) 的杰出工作,以下是重点合并内容概述 🔧 语言及工具链更新 KCL 格式化工具更新 支持对有语法错误的代码片段和部分代码片段进行格式

2023-10-14

! KCL 官网:https://kcl-lang.io 内容概述 感谢所有贡献者过去两周 (2023 09.07 - 10.11) 的杰出工作,以下是重点合并内容概述 🔧 语言及工具链更新 KCL v0.6.0 于 9.15 发布,更新内容包括语言、工具链、社区集成,详细内容请查看

2023-11-10

KCL 官网:https://kcl-lang.io |内容概述| 感谢所有贡献者过去近一月 (2023 10.26 - 11.8) 的杰出工作,以下是重点合并内容概述 🔧 语言及工具链更新 KCL IDE 更新 - 更智能的配置值补全、属性列表补全、函数参数

2023-08-11

地了解 KCL 社区! KCL 官网:https://kcl-lang.io 内容概述 过去两周 (2023 07.26 - 08.09),KCL 所有项目中总计有 34 个 PR 被合并,感谢所有贡献者的杰出工作,以下是重点合并内容概述 🔧 语言及工具链更新 KCL Doc 文档工具新增

2024-01-05

区! KCL 官网:kcl-lang.io 内容概述​ 感谢所有贡献者过去两周 (2023 12.22 - 2024.01.04) 的杰出工作,以下是重点内容概述 🔧 工具链更新 包管理工具更新 支持带 - 符号的外部包自动转义为 KCL 可以识别的 _&nbs

2023-07-18

简介 KCL 团队很高兴地宣布 KCL v0.5.0 新版本现在已经可用!本次发布为大家带来了三方面的重点更新:语言、工具链、社区集成 & 扩展支持。 使用功能更完善错误更少的 KCL 语言和 IDE 提升代码编写体验和效率 使用 KPM,

2023-12-02

简介​ KCL 团队很高兴地宣布 KCL v0.7.0 新版本现在已经可用!本次发布为大家带来了三方面的重点更新:语言、工具链、社区集成 & 扩展支持。 使用功能更完善错误更少的 KCL 语言、工具链和 IDE 提升代码编写体验和效

2023-11-24

KCL 官网: https://kcl-lang.io 内容概述 感谢所有贡献者过去两周 (2023 11.09 - 11.23) 的杰出工作,以下是重点内容概述 📦 模型更新 KCL 模型数量新增至 200 个,主要新增与 Pod, RBAC 相关的校验模型及 Kubernetes 1.14

2023-07-20

在过去的 17 个月(2022 年 1 月至 2023 年 5 月)时间里,DevJobsScanner 通过分析超 1400 万个开发人员职位,并从中筛选了有明确编程语言需求的职位,得出了在 2023 年需求量最大的 8 种 语言。 目前市场中需求最高的前八位语言分别

2022-11-14

期以来,TypeScript 在该榜单中的排名却总是停滞不前。在过去的三轮调查中,TypeScript 一直保持第八的位置;本季度则与 C++ 并列第七。RedMonk 曾指出过一些与编程语言流行度相关的一般因素,包括:前面提到的与流行的现有语言

2022-12-14

DevJobsScanner 在过去的 14 个月(从 2021 年 10 月到 2022 年 11 月)中分析了超过 1200 万个开发人员职位需求,并从其中挑选了明确需要编程语言的工作机会,得到了 2022 年最受欢迎的 8 种编程语言。 目前市场中需求最高的前八位语