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?

在日常开发工作中,我们经常需要:

  1. 快速查看天气:在终端中快速获取天气信息,无需打开浏览器
  2. 多城市查询:支持查询任意城市的天气
  3. 美观显示:使用 ASCII 艺术图标,让终端显示更加美观
  4. 脚本集成:可以集成到 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 项目,适配工作主要包括:

  1. 交叉编译:使用 Go 的交叉编译功能,从 macOS/Linux 编译到鸿蒙PC(aarch64-linux-ohos)
  2. CGO 禁用:禁用 CGO,使用纯 Go 编译,避免 C 依赖问题
  3. 静态链接:生成静态链接的二进制文件,无需外部依赖
  4. 打包配置:创建 HNP(HarmonyOS Native Package)包配置文件
  5. 构建脚本:编写自动化构建脚本,支持交叉编译环境

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 字符宽度)

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐