从Hello World到微服务:手把手教你用仓颉语言(Cangjie)和CodeArts IDE搭建第一个鸿蒙原生应用 从Hello World到微服务手把手教你用仓颉语言和CodeArts IDE搭建第一个鸿蒙原生应用第一次接触仓颉语言时我被它简洁的语法和强大的功能所吸引。作为一个长期从事移动开发的程序员我一直在寻找一种既能快速上手又能满足复杂业务需求的编程语言。仓颉语言的出现特别是它与鸿蒙生态的深度整合让我看到了新的可能性。本文将带你从零开始一步步构建一个具备前后端交互能力的微服务Demo在这个过程中你会掌握仓颉语言的核心语法、CodeArts IDE的使用技巧以及如何利用仓颉的微服务框架特性。1. 环境准备与第一个Hello World在开始之前我们需要准备好开发环境。仓颉语言目前主要支持华为的CodeArts IDE这是一款专为鸿蒙生态优化的集成开发环境。1.1 安装CodeArts IDE访问华为开发者官网下载最新版的CodeArts IDE。安装过程非常简单下载对应操作系统的安装包Windows/macOS/Linux运行安装程序按照向导完成安装启动IDE后在插件市场中搜索仓颉语言支持并安装注意安装路径中不要包含中文或特殊字符这可能导致一些工具链无法正常工作1.2 配置仓颉语言SDK安装完IDE后我们需要配置仓颉语言的开发工具链# 在终端中检查仓颉编译器是否安装成功 cj --version如果看到版本号输出说明安装正确。接下来让我们创建第一个仓颉项目在CodeArts IDE中选择新建项目选择仓颉应用程序模板输入项目名称如HelloCangjie选择项目保存位置点击完成创建项目1.3 编写并运行Hello World在项目创建完成后IDE会自动生成一个基本的项目结构。找到src/main.cj文件这是程序的入口文件。让我们修改它来输出经典的Hello World// 第一个仓颉程序 main { println(你好仓颉) }点击运行按钮或使用快捷键CtrlR你将在控制台看到输出结果。这个简单的程序展示了仓颉语言的几个特点不需要显式的分号结尾主函数使用main关键字定义println是内置的输出函数注释风格与C/Java类似2. 仓颉语言核心语法快速入门在构建更复杂的应用前我们需要快速掌握仓颉语言的基础语法。仓颉融合了多种编程范式的优点语法简洁但功能强大。2.1 变量与基本数据类型仓颉是静态类型语言但支持类型推断// 显式类型声明 let name: String 仓颉 // 类型推断 let version 1.0 // 自动推断为Float // 不可变变量 const PI 3.14159 // 可变变量 var count 0 count 1仓颉支持的基本数据类型包括类型描述示例Int整型42Float浮点数3.14Bool布尔值true, falseString字符串HelloChar单个字符AArray[T]泛型数组[1, 2, 3]2.2 控制流与函数仓颉的控制流语句简洁直观// if表达式 let max if a b { a } else { b } // when表达式类似switch when x { 1 - println(一) 2 - println(二) else - println(其他) } // for循环 for i in 1..10 { println(i) } // while循环 var n 0 while n 5 { println(n) n 1 }函数定义使用fn关键字// 基本函数 fn greet(name: String) { println(你好${name}) } // 带返回值的函数 fn add(a: Int, b: Int) - Int { return a b } // 单表达式函数简写 fn square(x: Int) - Int x * x2.3 面向对象特性仓颉支持面向对象编程但比传统语言更简洁// 类定义 class Person(name: String, age: Int) { // 方法 fn introduce() { println(我是${name}今年${age}岁) } } // 继承 class Student(name: String, age: Int, grade: Int) : Person(name, age) { fn study() { println(${name}正在学习) } } // 使用 let student Student(张三, 18, 3) student.introduce() student.study()3. 构建一个简单的HTTP服务现在我们已经掌握了仓颉的基础语法可以开始构建一个简单的HTTP服务了。仓颉标准库提供了强大的网络编程支持。3.1 创建HTTP服务器首先我们需要导入网络库import net.http然后创建一个简单的HTTP服务器fn main { let server http.Server { port 8080 // 处理GET请求 get /hello fn(req, res) { res.send(你好仓颉HTTP服务) } // 处理POST请求 post /echo fn(req, res) { res.json(req.body) } } server.start() println(服务器已启动访问 http://localhost:8080/hello) }这段代码创建了一个监听8080端口的HTTP服务器定义了两个路由GET /hello返回简单的欢迎信息POST /echo将请求体作为JSON返回3.2 测试HTTP服务我们可以使用curl命令测试这个服务# 测试GET接口 curl http://localhost:8080/hello # 测试POST接口 curl -X POST -H Content-Type: application/json -d {message:测试} http://localhost:8080/echo3.3 添加中间件仓颉的HTTP模块支持中间件可以方便地添加日志、认证等功能fn logger(req, res, next) { println(${req.method} ${req.url}) next() } fn main { let server http.Server { port 8080 // 使用中间件 use logger get /hello fn(req, res) { res.send(你好中间件) } } server.start() }4. 开发鸿蒙原生应用前端现在我们已经有了一个简单的后端服务接下来让我们开发一个鸿蒙原生应用作为前端界面。4.1 创建鸿蒙应用项目在CodeArts IDE中选择新建项目选择鸿蒙应用选择仓颉语言作为开发语言输入项目名称如CangjieDemo点击完成4.2 设计简单UI鸿蒙的UI框架采用声明式编程风格。编辑resources/base/layout/main_layout.xmlDirectionalLayout xmlns:ohoshttp://schemas.huawei.com/res/ohos ohos:widthmatch_parent ohos:heightmatch_parent ohos:orientationvertical ohos:padding20vp Text ohos:id$id:titleText ohos:widthmatch_parent ohos:heightwrap_content ohos:text仓颉语言Demo ohos:text_size24fp ohos:text_alignmentcenter/ Button ohos:id$id:fetchButton ohos:widthmatch_parent ohos:heightwrap_content ohos:text获取数据 ohos:margin_top20vp/ Text ohos:id$id:resultText ohos:widthmatch_parent ohos:heightwrap_content ohos:margin_top20vp/ /DirectionalLayout4.3 添加交互逻辑在仓颉代码中处理按钮点击和网络请求import ohos.aafwk.ability.Ability import ohos.agp.components.Component import ohos.app.Context import net.http class MainAbility : Ability { override fn onStart(intent) { super.onStart(intent) let layout LayoutScatter.getInstance(this) .parse($id::main_layout, null, false) uiContent layout let fetchButton layout.findComponentById($id::fetchButton) let resultText layout.findComponentById($id::resultText) fetchButton.setClickedListener(fn(component: Component) { http.get(http://10.0.2.2:8080/hello, fn(res) { getUITaskDispatcher().asyncDispatch(fn { resultText.text res }) }, fn(err) { getUITaskDispatcher().asyncDispatch(fn { resultText.text 错误: ${err} }) }) }) } }注意在鸿蒙模拟器中使用10.0.2.2访问本地开发机上的服务5. 整合微服务框架仓颉语言内置了强大的微服务支持让我们将简单的HTTP服务升级为完整的微服务应用。5.1 添加微服务依赖编辑项目的build.cj文件添加微服务框架依赖dependencies { implementation org.cangjie:micro:1.0.0 }5.2 创建服务模块// 定义服务接口 service GreetingService { fn greet(name: String) - String } // 实现服务 MicroService class GreetingServiceImpl : GreetingService { override fn greet(name: String) - String { return 你好${name} } }5.3 配置服务注册中心创建application.cj配置文件micro { registry { address localhost:8848 // Nacos地址 } server { port 8080 name greeting-service } }5.4 调用其他服务在需要调用其他服务的地方let greetingService MicroServiceClient.getService(GreetingService) let result greetingService.greet(仓颉) println(result)6. 项目构建与部署完成开发后我们需要将应用打包部署。6.1 构建鸿蒙应用在CodeArts IDE中右键点击项目选择构建 构建HAP构建完成后在build/outputs目录下找到.hap文件6.2 部署到模拟器或真机启动鸿蒙模拟器将.hap文件拖入模拟器窗口安装或者使用命令行工具安装hdc install path/to/app.hap6.3 部署微服务微服务可以打包为Docker容器部署创建DockerfileFROM cangjie/runtime:latest COPY build/libs/service.jar /app/ CMD [cj, /app/service.jar]构建并运行容器docker build -t greeting-service . docker run -p 8080:8080 greeting-service在实际项目中你可能还需要配置服务发现、API网关、监控等微服务基础设施。仓颉语言的微服务框架与华为云服务深度集成可以轻松实现这些功能。