终端天气查询利器:wego天气客户端在鸿蒙PC上的完整适配实战
本文介绍了将终端天气客户端wego适配到开源鸿蒙PC平台的全过程。wego是一款基于Go语言开发的工具,支持多天气数据源查询和多种显示格式输出。适配工作主要包括交叉编译配置(目标平台aarch64-linux-ohos)、禁用CGO依赖、编写自动化构建脚本以及创建HNP包配置文件。文章详细阐述了技术方案、实现细节和构建部署步骤,包括环境搭建、构建脚本设计、HNP包配置等内容,并提供了终端测试指南和
wego 是一个功能强大的终端天气客户端,本文档详细介绍如何将 wego 工具适配到开源鸿蒙PC平台,包括环境搭建、构建过程、使用示例和常见问题解决方案。
📋 目录
一、项目概述
1.1 wego 工具介绍
wego 是一个用 Go 语言编写的终端天气客户端,由 schachmat 开发并维护。它提供了美观的 ASCII 艺术图标和丰富的天气信息显示,让开发者可以在终端中快速查看天气预报。
核心特性:
- 多天预报:显示 1-7 天的天气预报
- 美观显示:使用 ASCII 艺术图标展示天气状况
- 多数据源:支持 OpenWeatherMap、WorldWeatherOnline、Open-Meteo、SMHI、Caiyun 等多种天气数据源
- 多显示格式:支持 ASCII 表格、Emoji、JSON、Markdown 等多种前端显示格式
- 多单位系统:支持公制(metric)、英制(imperial)、SI、公制-米/秒(metric-ms)等单位系统
- 多语言支持:支持多种语言的天气描述
- SSL 加密:使用 HTTPS 保护用户隐私
- 配置管理:支持配置文件,可设置默认位置和 API 密钥
主要功能:
- 实时天气查询和显示
- 多天天气预报(1-7天)
- 温度范围(体感温度和实际温度)
- 风速和风向
- 能见度
- 降水量和降水概率
- 天气图标和描述

1.2 项目信息
| 项目信息 | 详情 |
|---|---|
| 项目名称 | wego |
| 版本 | 2.4(适配版本)<br>2.3(原始版本) |
| 许可证 | ISC License |
| 源码仓库 | https://github.com/schachmat/wego |
| 适配平台 | 鸿蒙PC (aarch64-linux-ohos) |
| 项目类型 | Go 语言项目 |
| Go 版本要求 | Go 1.20+ |
| 依赖 | 纯 Go 依赖(无 CGO) |
1.3 为什么需要 wego?
在日常开发工作中,我们经常需要:
- ✅ 快速查看天气:在终端中快速获取天气信息,无需打开浏览器
- ✅ 多城市查询:支持查询任意城市的天气
- ✅ 美观显示:使用 ASCII 艺术图标,让终端显示更加美观
- ✅ 脚本集成:可以集成到 shell 脚本中,实现自动化天气查询
wego 提供了简洁的命令行接口和丰富的功能,让终端天气查询变得简单高效。
二、鸿蒙化适配设计
2.1 适配目标
🎯 核心目标:将 wego 天气客户端适配到开源鸿蒙PC平台,使其能够在鸿蒙PC终端环境中正常运行,为鸿蒙生态提供便捷的天气查询工具。
适配价值:
- ✅ 为鸿蒙PC提供专业的终端天气查询工具
- ✅ 展示 Go 语言项目的鸿蒙化适配方法
- ✅ 支持多种天气数据源和显示格式
2.2 技术方案
2.2.1 架构分析
wego 是一个 Go 语言项目,采用插件化架构设计:
wego 项目结构:
├── main.go # 主程序入口
├── iface/ # 接口定义
│ └── iface.go # 后端和前端接口
├── backends/ # 天气数据后端(插件)
│ ├── openweathermap.org.go # OpenWeatherMap 后端
│ ├── worldweatheronline.com.go # WorldWeatherOnline 后端
│ ├── open-meteo.com.go # Open-Meteo 后端
│ ├── smhi.go # SMHI 后端
│ └── caiyun.go # 彩云天气后端
├── frontends/ # 显示前端(插件)
│ ├── ascii-art-table.go # ASCII 表格前端
│ ├── emoji.go # Emoji 前端
│ ├── json.go # JSON 前端
│ └── markdown.go # Markdown 前端
├── go.mod # Go 模块定义
├── go.sum # Go 依赖校验和
├── hnp.json # HNP 包配置文件
└── build_ohos.sh # 鸿蒙构建脚本
核心依赖:
github.com/mattn/go-colorable- 终端颜色支持github.com/mattn/go-runewidth- Unicode 字符宽度计算github.com/schachmat/ingo- 配置管理
2.2.2 适配策略
由于 wego 是纯 Go 项目,适配工作主要包括:
- 交叉编译:使用 Go 的交叉编译功能,从 macOS/Linux 编译到鸿蒙PC(aarch64-linux-ohos)
- CGO 禁用:禁用 CGO,使用纯 Go 编译,避免 C 依赖问题
- 静态链接:生成静态链接的二进制文件,无需外部依赖
- 打包配置:创建 HNP(HarmonyOS Native Package)包配置文件
- 构建脚本:编写自动化构建脚本,支持交叉编译环境
2.3 技术难点与解决方案
2.3.1 交叉编译配置
问题:需要从 macOS/Linux 交叉编译到鸿蒙PC(aarch64-linux-ohos)
解决方案:
export GOOS=linux
export GOARCH=arm64
export CGO_ENABLED=0 # 禁用 CGO,使用纯 Go 编译
2.3.2 依赖管理
问题:确保所有依赖都是纯 Go 实现,不依赖 C 库
解决方案:
- 使用
CGO_ENABLED=0强制禁用 CGO - 验证所有依赖都是纯 Go 实现
- 使用
go mod download下载依赖
2.3.3 终端兼容性
问题:确保终端支持 UTF-8 和 256 色显示
解决方案:
- 在文档中说明终端要求
- 提供终端配置建议
- 支持 monochrome 模式作为降级方案
三、实现细节
3.1 构建脚本设计
build_ohos.sh 构建脚本包含以下关键步骤:
#!/bin/bash
# wego OpenHarmony build script
# 1. 设置安装路径
export WEGO_INSTALL_HNP_PATH=${HNP_PUBLIC_PATH}/wego.org/wego_2.4
# 2. 检查 Go 环境
if ! command -v go &> /dev/null; then
echo "Error: Go is not installed. Please install Go 1.20 or later."
exit 1
fi
# 3. 设置交叉编译环境变量
export GOOS=linux
export GOARCH=arm64
export CGO_ENABLED=0
# 4. 下载依赖
go mod download
# 5. 构建二进制文件
go build -ldflags="-s -w" -o ${WEGO_INSTALL_HNP_PATH}/bin/wego ./main.go
# 6. 复制文档和配置文件
# 7. 打包 HNP 和 tar.gz
3.2 HNP 包配置
hnp.json 配置文件:
{
"type": "hnp-config",
"name": "wego",
"version": "2.4",
"install": {}
}
3.3 安装目录结构
/data/service/hnp/wego.org/wego_2.4/
├── bin/
│ └── wego # 主可执行文件
├── share/
│ └── doc/
│ └── wego/
│ ├── README.md # 项目说明
│ ├── LICENSE # 许可证
│ └── CONTRIBUTING.md # 贡献指南
└── hnp.json # HNP 配置文件
四、构建与部署
4.1 构建环境要求
- 开发环境:macOS 或 Linux
- Go 版本:Go 1.20 或更高版本
- OHOS SDK:OpenHarmony SDK 6.0.0.46-Beta1 或更高版本
- 网络连接:用于下载 Go 依赖
4.2 构建步骤
步骤 1:准备构建环境
# 进入构建目录
cd HarmonyOSPC/build
# 设置 SPECIFIC_DIR 环境变量(如果需要)
export SPECIFIC_DIR=wego
步骤 2:执行构建
# 执行构建脚本
./build.sh --sdk /Users/lijiajun/ohos-sdk
步骤 3:验证构建结果
构建成功后,会在 output/ 目录生成以下文件:
wego_2.4.hnp- HNP 包文件ohos_wego_2.4.tar.gz- tar.gz 压缩包
4.3 部署到鸿蒙PC
方式一:使用 HNP 包安装
# 在鸿蒙PC上安装 HNP 包
hnp install wego_2.4.hnp
方式二:使用 tar.gz 包安装
# 解压 tar.gz 包
tar -xzf ohos_wego_2.4.tar.gz
# 复制到安装目录
cp -r wego_2.4/* /data/service/hnp/wego.org/wego_2.4/
# 添加到 PATH(可选)
export PATH=$PATH:/data/service/hnp/wego.org/wego_2.4/bin
五、使用示例
5.1 基本使用
5.1.1 首次运行和配置
# 首次运行 wego(会生成配置文件)
wego
# 配置文件位置:~/.wegorc(注意是 ~/.wegorc,不是 ~./wegorc)
配置方法(鸿蒙PC可能没有 vi/nano 编辑器):
方法 1:使用 cat 命令创建配置文件(推荐)
# 使用 cat 和 heredoc 创建配置文件
cat > ~/.wegorc << 'EOF'
backend=openweathermap
location=Beijing
owm-api-key=YOUR_OPENWEATHERMAP_API_KEY_HERE
days=3
units=metric
owm-lang=en
EOF
方法 2:使用 echo 命令逐行写入
# 逐行写入配置文件
echo "backend=openweathermap" > ~/.wegorc
echo "location=Beijing" >> ~/.wegorc
echo "owm-api-key=YOUR_OPENWEATHERMAP_API_KEY_HERE" >> ~/.wegorc
echo "days=3" >> ~/.wegorc
echo "units=metric" >> ~/.wegorc
echo "owm-lang=en" >> ~/.wegorc
方法 3:使用命令行参数(无需配置文件)
# 直接在命令行指定 API 密钥,无需配置文件
wego -owm-api-key YOUR_API_KEY_HERE Beijing
# 或使用不需要 API 密钥的后端(如 Open-Meteo)
wego -b open-meteo.com Beijing
方法 4:使用其他编辑器(如果系统有)
# 尝试使用 nano(如果可用)
nano ~/.wegorc
# 或使用 vim(如果可用)
vim ~/.wegorc
配置文件示例(~/.wegorc):
backend=openweathermap
location=Beijing
owm-api-key=YOUR_OPENWEATHERMAP_API_KEY_HERE
days=3
units=metric
owm-lang=en
配置完成后验证:
# 运行 wego 测试配置
wego
# 或查询指定城市
wego Beijing
5.1.2 查询指定城市天气
# 查询北京天气(默认3天)
wego Beijing
# 查询上海天气,显示5天
wego Shanghai 5
# 或使用命令行参数
wego -l "New York" -d 7
5.1.3 使用不同单位系统
# 公制单位(metric)
wego -u metric Beijing
# 英制单位(imperial)
wego -u imperial London
# SI 单位
wego -u si Tokyo
# 公制-米/秒(metric-ms)
wego -u metric-ms Shanghai
5.2 高级使用
5.2.1 使用不同后端
# 使用 OpenWeatherMap 后端(默认)
wego -b openweathermap Beijing
# 使用 Open-Meteo 后端
wego -b open-meteo.com Beijing
# 使用 SMHI 后端
wego -b smhi Stockholm
# 使用彩云天气后端
wego -b caiyun Beijing
5.2.2 使用不同前端显示格式
# ASCII 表格格式(默认)
wego -f ascii-art-table Beijing
# Emoji 格式
wego -f emoji Beijing
# JSON 格式
wego -f json Beijing
# Markdown 格式
wego -f markdown Beijing
5.2.3 组合使用
# 查询多个城市,使用 JSON 格式输出
wego -f json -d 7 "New York" "London" "Tokyo"
# 使用 Open-Meteo 后端,显示7天,公制单位
wego -b open-meteo.com -d 7 -u metric Beijing
5.3 实际应用场景
场景 1:每日天气查询脚本
创建 daily_weather.sh:
#!/bin/sh
# 每日天气查询脚本
# 查询北京天气,显示3天
/data/service/hnp/wego.org/wego_2.4/bin/wego Beijing 3
场景 2:多城市天气对比
创建 compare_weather.sh:
#!/bin/sh
# 多城市天气对比脚本
echo "=== 北京天气 ==="
wego Beijing
echo ""
echo "=== 上海天气 ==="
wego Shanghai
echo ""
echo "=== 广州天气 ==="
wego Guangzhou
场景 3:集成到系统监控
创建 weather_monitor.sh:
#!/bin/sh
# 天气监控脚本,每小时更新一次
while true; do
clear
echo "=== $(date) ==="
wego Beijing 1
sleep 3600 # 等待1小时
done
六、技术亮点
6.1 纯 Go 实现
- ✅ 无 C 依赖:使用
CGO_ENABLED=0进行纯 Go 编译 - ✅ 静态链接:生成静态链接的二进制文件,无需外部依赖
- ✅ 跨平台:Go 的交叉编译能力使得适配工作简单高效
6.2 插件化架构
- ✅ 后端插件:支持多种天气数据源,易于扩展
- ✅ 前端插件:支持多种显示格式,满足不同需求
- ✅ 接口设计:清晰的接口定义,便于添加新功能
6.3 配置管理
- ✅ 自动配置:首次运行自动生成配置文件
- ✅ 灵活配置:支持命令行参数和配置文件
- ✅ 环境变量:支持
WEGORC环境变量覆盖配置文件路径
6.4 终端兼容性
- ✅ UTF-8 支持:正确处理 Unicode 字符
- ✅ 颜色支持:支持 256 色终端显示
- ✅ 降级方案:支持 monochrome 模式
七、总结
7.1 适配成果
本次适配成功将 wego 天气客户端移植到开源鸿蒙PC平台,实现了:
- ✅ 完整功能:所有核心功能在鸿蒙PC上正常运行
- ✅ 零依赖:静态链接二进制文件,无需外部依赖
- ✅ 易用性:保持原有的简洁命令行接口
- ✅ 可扩展性:插件化架构便于后续扩展
7.2 技术价值
- 📦 Go 项目适配示例:展示了 Go 语言项目在鸿蒙PC上的适配方法
- 🔧 交叉编译实践:验证了 Go 交叉编译在鸿蒙PC上的可行性
- 📚 文档完善:提供了详细的构建和使用文档
7.3 未来展望
- 🔮 更多后端:可以添加更多天气数据源后端
- 🎨 更多前端:可以添加更多显示格式前端
- 🌍 多语言:可以完善多语言支持
八、鸿蒙PC终端测试指南
8.1 测试环境准备
# 1. 确保 wego 已安装
which wego
# 输出:/data/service/hnp/wego.org/wego_2.4/bin/wego
# 2. 检查终端支持
echo $TERM
# 应该输出:xterm-256color 或类似值
# 3. 检查 UTF-8 支持
locale | grep UTF-8
8.2 功能测试
测试 1:基本查询
# 测试基本查询功能
wego Beijing
# 预期输出:显示北京的天气信息(ASCII 表格格式)
测试 2:多天预报
# 测试多天预报功能
wego Beijing 7
# 预期输出:显示北京7天的天气预报
测试 3:不同格式
# 测试 JSON 格式
wego -f json Beijing
# 预期输出:JSON 格式的天气数据
测试 4:不同后端
# 测试 Open-Meteo 后端(无需 API 密钥)
wego -b open-meteo.com Beijing
# 预期输出:使用 Open-Meteo 后端获取天气数据
8.3 性能测试
# 测试响应时间
time wego Beijing
# 预期:响应时间 < 5秒(取决于网络速度)
8.4 兼容性测试
# 测试不同单位系统
wego -u metric Beijing
wego -u imperial Beijing
wego -u si Beijing
# 预期:都能正常显示,单位正确转换
九、参考资料
9.1 官方资源
- wego 项目仓库:https://github.com/schachmat/wego
- OpenHarmony 官方文档:https://gitee.com/openharmony/docs
- HNP 包管理规范:https://gitee.com/openharmony-sig/ohup
9.2 天气 API 资源
- OpenWeatherMap:https://openweathermap.org/api
- Open-Meteo:https://open-meteo.com/en/docs
- SMHI:https://www.smhi.se/en/weather
- 彩云天气:https://caiyunapp.com/
9.3 Go 语言资源
- Go 官方文档:https://go.dev/doc/
- Go 交叉编译:https://go.dev/doc/install/source#environment
- Go Modules:https://go.dev/ref/mod
9.4 相关工具
- ingo:https://github.com/schachmat/ingo(配置管理库)
- go-colorable:https://github.com/mattn/go-colorable(终端颜色支持)
- go-runewidth:https://github.com/mattn/go-runewidth(Unicode 字符宽度)
、
更多推荐




所有评论(0)