鸿蒙PC(HarmonyPC / OpenHarmony)作为国产操作系统的代表,生态正在快速成长。开发者越来越多地关注如何在鸿蒙PC上进行日常开发工作。Go语言凭借其简洁的语法、强大的并发模型和跨平台编译能力,成为服务端开发的热门选择。
更多交流学习,欢迎加入开源鸿蒙PC社区 :https://harmonypc.csdn.net/
前言
鸿蒙PC(HarmonyPC / OpenHarmony)作为国产操作系统的代表,生态正在快速成长。开发者越来越多地关注如何在鸿蒙PC上进行日常开发工作。Go语言凭借其简洁的语法、强大的并发模型和跨平台编译能力,成为服务端开发的热门选择。
本文记录了在鸿蒙PC上从零搭建Go语言开发环境、编写HTTP服务、并通过 Serveo 内网穿透工具从外网穿透访问服务的完整过程。
一、环境安装:用 Harmonybrew 一键安装 Go
1.1 什么是 Harmonybrew?
Harmonybrew 是一个开源的包管理器,它将经典的 Homebrew (macOS / Linux 上最流行的包管理工具)移植到了 OpenHarmony 操作系统上。这意味着,开发者可以在鸿蒙设备上使用熟悉的 brew install、brew search、brew update 等命令来安装和管理软件包。类似于Ubuntu上的apt-get或CentOS上的yum包管理工具,功能类似于Homebrew(Homebrew是Mac上最好用的包管理工具)。
1.2 安装 Harmonybrew
官方网站:https://harmonybrew.atomgit.com/
开源仓库:https://atomgit.com/Harmonybrew
在鸿蒙PC终端执行:
zsh
# 下载并执行安装脚本
zsh -c "$(curl -fsSL https://harmonybrew.atomgit.com/install.sh)"
# 安装完成后,按照提示将 brew 加入 PATH
echo 'eval "$(/storage/Users/currentUser/.harmonybrew/bin/brew shellenv)"' >> ~/.zshrc
eval "$(/storage/Users/currentUser/.harmonybrew/bin/brew shellenv)"
1.3 一键安装最新 Go
zsh
brew install go
安装完成后验证:
zsh
go version
# 输出示例: go version go1.26.4 linux/arm64
无需手动配置 GOROOT 和 GOPATH,Harmonybrew 会自动处理好一切。这是它最大的优势------在鸿蒙PC上省去了大量踩坑时间。
二、第一个 Go HTTP 服务
2.1 初始化项目
bash
mkdir ~/gotest && cd ~/gotest
go mod init gotest
2.2 使用 Gin 框架编写服务
安装 Gin:
bash
go get github.com/gin-gonic/gin
编写 main.go:
go
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/http/httptest"
"os"
"github.com/gin-gonic/gin"
)
func main() {
if len(os.Args) > 1 && os.Args[1] == "--check" {
runSelfCheck()
return
}
r := gin.Default()
r.GET("/hello", func(c *gin.Context) {
name := c.DefaultQuery("name", "World")
c.JSON(http.StatusOK, gin.H{
"message": fmt.Sprintf("Hello, %s!", name),
})
})
fmt.Println("Server starting on :8080 ...")
r.Run(":8080")
}
2.3 编译与运行
bash
# 编译
go build -o gotest-server .
# 运行
./gotest-server
输出:
Server starting on :8080 ...
到这里,服务已经在鸿蒙PC本地的 8080 端口上监听。
注意:
如果你首次编译执行很慢,这可能是你没有配置国内镜像代理,导致访问golang的依赖包超时。可以执行以下命令看到go run执行的详细过程:
bash
go run -x --work main.go
如何提高编译速度?配置golang的 国内镜像:
bash
go env -w GOPROXY=https://goproxy.cn,direct
三、用 Serveo 打通外部访问
3.1 什么是 Serveo?
Serveo 是一个基于 SSH 隧道的免费内网穿透服务。它不需要安装客户端(利用系统自带的 SSH),就能把你的本地服务暴露到一个公网域名上。
3.2 建立隧道
bash
ssh -R 80:localhost:8080 serveo.net
执行后输出:
Forwarding HTTP traffic from https://xxxx.serveo.net
3.3 外部访问测试
然后在任意设备(手机、另一台电脑)的浏览器访问:
https://xxxx.serveo.net/hello
https://xxxx.serveo.net/hello?name=Go
成功返回:
json
{"message":"Hello, World!"}
json
{"message":"Hello, Go!"}
输入以下命令方式启动服务:
bash
./gotest-server & ssh -o StrictHostKeyChecking=no -R 80:localhost:8080 serveo.net

这一刻,外网也可以访问到了。

3.4 Serveo 的优缺点
| 优点 | 缺点 |
|---|---|
| 无需安装客户端,系统自带 SSH 即可 | 免费版有流量限制 |
| 支持 HTTPS(自动分配证书) | 公网传输有延迟 |
| 配置极度简单,一行命令 | 外部域名随机生成(付费版可固定) |
| 适合调试和演示 | 不适合生产环境 |
四、添加自检功能(提升开发体验)
作为一个实用的 Go 服务,我们可以在编译时就验证逻辑正确性,避免部署后才发现问题。
在 main.go 中增加 --check 模式:
go
func runSelfCheck() {
gin.SetMode(gin.ReleaseMode)
r := gin.Default()
r.GET("/hello", helloHandler)
ts := httptest.NewServer(r)
defer ts.Close()
// 测试无参请求
resp, _ := http.Get(ts.URL + "/hello")
body, _ := io.ReadAll(resp.Body)
resp.Body.Close()
fmt.Printf("GET /hello -> %s\n", string(body))
// 测试带参请求
resp, _ = http.Get(ts.URL + "/hello?name=AtomCode")
body, _ = io.ReadAll(resp.Body)
resp.Body.Close()
fmt.Printf("GET /hello?name=AtomCode -> %s\n", string(body))
fmt.Println("ALL TESTS PASSED")
}
使用方式:
bash
# 编译后自检,无需启动服务
./gotest-server --check
输出:
GET /hello -> {"message":"Hello, World!"}
GET /hello?name=AtomCode -> {"message":"Hello, AtomCode!"}
ALL TESTS PASSED
五、涉及 cgo 的场景
Harmonybrew 包管理工具的强大之处,还在于解决了需要在鸿蒙PC上签名才能运行的问题,让开发者无感知。其实Harmonybrew 在 go 命令行工具的构建管道中打了一个 自动签名补丁,使 go 在产出 ELF 二进制文件时自动调用 binary-sign-tool 进行代码签名,编译出来的程序无需手动签名即可直接在鸿蒙 PC 上运行。
由于 binary-sign-tool 来自 ohos-sdk,Harmonybrew 安装go工具链时会自动让 go 级联依赖了 ohos-sdk,这意味着你只需安装 go 这一个包,ohos-sdk 便会被自动下载并配置好。
参考Harmonybrew 文档:https://atomgit.com/Harmonybrew/docs/blob/main/zh-CN/user/featured-packages.md
对于涉及 cgo 的场景,Go 默认会调用 cc 命令作为外部链接器。我们可以使用Harmonybrew 包管理工具直接安装 llvm-gcc-compat,让它提供 cc 命令(指向 ohos-sdk 中的 clang)。如此一来,cgo 编译可直接开箱即用:
bash
# 安装 go 和 llvm-gcc-compat(提供 cc 命令供 cgo 使用)
brew install go llvm-gcc-compat
mkdir cgo-example
cd cgo-example
# 编写一个 cgo 程序
cat > hello_cgo.go << 'EOF'
package main
/*
#include <stdio.h>
void hello() { printf("%s\n", "Hello from cgo!"); fflush(stdout); }
*/
import "C"
func main() {
C.hello()
}
EOF
# 编译并运行
go mod init hello-cgo
CGO_ENABLED=1 go build -o hello_cgo .
./hello_cgo
六、总结
6.1 完整工作流
写代码 → go build → ./gotest-server
↓
ssh -R 80:localhost:8080 serveo.net
↓
浏览器访问 https://xxxx.serveo.net/hello
6.2 关键收获
-
鸿蒙PC安装Go开发环境最快捷的方式 :
brew install go,一键搞定,无需手动配置环境变量。 -
外网如何访问本机服务:
- Serveo 内网穿透:一行命令即可从外网访问,适合演示和调试。
-
用
--check自检模式:在开发阶段快速验证服务逻辑,不需要启动真实监听,提升开发效率。
6.3 展望
随着鸿蒙PC生态的逐步完善,鸿蒙PC也支持各种编程语言的开发测试,可以作为高效的开发工具和生产力工具使用。
更多交流学习,欢迎加入开源鸿蒙PC社区 :https://harmonypc.csdn.net/