news 2026/4/23 10:17:25

用 Go 像写 Web 一样做桌面应用:完全离线的手机号归属地查询工具

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用 Go 像写 Web 一样做桌面应用:完全离线的手机号归属地查询工具

前阵子我做了一个小工具:一个完全离线的手机号归属地查询桌面应用

功能本身其实并不复杂,但在这个过程中,我反而重新认识了一次

用 Go 做桌面应用,其实可以非常像在写一个 Web 项目。

这篇文章不打算讲手机号归属地怎么查(那真的很简单,如果你需要直接到文章底部仓库下载我做好的工具就好),而是想分享一下:

为什么我会选择用 Go + Wails 做成桌面应用,以及这个过程里的一些实际感受。


一个并不复杂的问题

如果不考虑携号转网,手机号归属地这件事本身并不复杂。

每个手机号在规划阶段,前七位就已经确定了对应的:

  • 运营商
  • 省份 / 城市

所以理论上,只要你手里有一份号段库,查询逻辑无非就是:

取前七位 → 查表 → 返回结果

这类数据也并不是什么秘密。

去 GitHub 看一眼,不同语言都有现成的库;百度搜一下,也有不少在线查询网站。

问题不在于“能不能做”,而在于“怎么用得顺不顺”。


为什么现有方案总感觉不太对

在真实使用场景里,我遇到的需求通常是这样的:

  • 机器不能联网
  • 需要一次性处理几十万甚至上百万个手机号
  • 只是想快速区分归属地,不想额外搭服务

这时候就会发现:

  • Web 方案
    在线查询适合查一两个号码,但一旦涉及大批量导入(几十上百万的数据)或者涉及隐私问题不方便泄漏这些手机号,就会变得很尴尬。
  • 脚本 / 代码库
    不同语言需要不同环境,作为有开发环境的自己用还好,给普通堆代码一窍不通的人用成本就很高了。

我想要的其实是一个很简单的东西:

一个不联网、不装环境,双击就能用的工具。

于是一个想法就冒出来了:

那为什么不直接做成一个 Windows / macOS 的桌面应用?


为什么是 Go + Wails

我之前用 Wails 简单做过一个 PC 端的财务管理应用,但那次更多是“试水”:

  • Go 当 Web 服务端
  • Vue 打包进桌面
  • 本质还是一套前后端分离的 Web 思路

这次我反而想换个方式,​尽量按照 Wails 的设计方式完整走一遍

选择它的原因也很直接:

  • Go
    • 编译后就是一个可执行文件
    • 非常适合做本地工具
    • 处理本地数据、文件都很舒服
  • Wails
    • 用 Web 技术写桌面应用
    • 不需要起 HTTP 服务
    • 前端可以直接调用 Go 方法

我平时用 Vue 比较多,所以直接用:

wails init -n 项目名 -t vue

Wails 支持的模板其实不少,React、Vue、Svelte 都有,翻一翻文档基本都能找到,这里就不展开了。


和传统 Web 最大的不同:没有路由

如果你是做 Web 开发的,上手 Wails 会非常快。

传统 Web 项目里,我们习惯的是:

Router(路由) → Handler(HTTP处理器) → Service(业务逻辑层) → Repository(模型访问层) → Model(数据模型)

请求通过路由分发到 Handler,再一层层往下走。

而在 Wails 里:

  • 不需要路由
  • app.go里的方法,会自动暴露给前端
  • 前端直接把它当成一个函数来调用

换个角度看:

app.go里的方法,其实就相当于传统 Web 里的 Router + Handler

至于 Service、Repository、Model 这些分层,​完全可以照搬

只是“请求”不再是 HTTP,而是一次本地方法调用。

这个点让我感觉非常舒服:

开发思路几乎没变,只是把“接口”换成了函数。


48 万条数据,SQLite 该怎么放

这个项目里有一个比较现实的问题:

我内置了 ​48 万多条手机号号段数据

SQLite 本身非常适合这种场景,但如果在应用启动时再一条条初始化写入数据库,体验会非常糟糕。

所以我的做法是:

  1. 提前生成一个完整的.db文件
  2. 在构建时,通过embed.FS把这个数据库文件带进程序
  3. 程序启动时:
    • 如果用户本地还没有数据库
    • 就直接把这份已经初始化好的.db拷贝过去

这样一来:

  • 启动速度很快
  • 不需要额外初始化逻辑
  • 数据也完全可控、可更新

这一步做完,后面的事情就简单很多了。

当然,考虑到数据会更新,我预留了构建脚本,方便开发过程中构建这个 ​.db​ 文件


开发体验:真的很像在写 Web

剩下的开发过程,基本就是“Web 开发的本地版”:

  • Go 这边写好查询服务
  • app.go封装成方法
  • 前端直接调用,不需要网络请求
  • wails build一次性完成:
    • 前端打包
    • 后端编译
    • 桌面应用生成

项目放在 GitHub 上之后,再配合 GitHub Actions,就可以自动构建 Windows / macOS 的可执行文件,整个流程非常顺。


一个很小的项目,但这个思路很实用

这个项目本身并不复杂,代码量也不多,我也尽量写了比较完整的注释。

如果你:

  • 想试试用 Go 写桌面应用
  • 又或者只是需要一个离线的手机号归属地查询工具

都可以看看这个项目,或者直接下载编译好的程序来用。

项目地址在这里:

👉 https://github.com/zxc7563598/go-mobile-locator

有时候换一种“应用形态”,

反而能让很多原本别扭的问题,一下子顺起来。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 23:24:59

【工具变量】地市链长制DID数据集(2016-2025年)

一、数据简介 本指标数据为地级市级数据,通过对全国地级市相关政策文件、政府公开信息等进行系统梳理与整理获得,未借助第三方商业数据库。数据时间跨度为2016-2025年,最终共获得3370条有效数据,其中链长制虚拟变量(c…

作者头像 李华
网站建设 2026/4/22 17:01:32

小型工厂生产管理系统推荐:2025中小制造企业MES系统权威排行榜

本文整理2025中小制造企业MES系统排行榜,基于多维度权威评估,帮制造企业老板、生产总监、采购负责人等决策人群快速锁定高适配、高性价比方案,解决“不知如何判断系统适配性”“担心成本超支”“怕落地效果差”等选型核心痛点。一、权威评估维…

作者头像 李华
网站建设 2026/4/22 8:53:28

在线快速制作伴奏软件功能AI编曲软件伴奏功能

解锁 AI 音乐新玩法:在线快速制作伴奏神器大揭秘 在音乐创作的道路上,许多人常常面临着各种难题。对于初学者来说,想要快速制作出一个满意的伴奏简直比登天还难,专业的编曲软件操作复杂,学习成本高,让人望而…

作者头像 李华
网站建设 2026/4/21 12:24:16

基于PLC的智能楼宇控制系统设计

第二章 智能楼宇系统总体方案确定 2.1 智能楼宇系统总体方案的设计 2.1.1 智能楼宇概述 世界各国对智能楼宇地定义参差不齐。在日本的智能楼宇的提法跟我们的国家相类似,他们定义智能建筑:集成了计算机,通讯等多方面先进的技术来实现照明、报…

作者头像 李华
网站建设 2026/4/21 23:06:17

人工智能训练效率革命:Modded-NanoGPT的技术突破与实践路径

在人工智能训练成本日益攀升的背景下,传统模型训练面临着能效比低、训练周期长的双重挑战。Modded-NanoGPT项目通过算法创新与系统优化,实现了GPT-2(124M参数)级别模型训练时间从45分钟压缩至2.86分钟的突破性进展,同时…

作者头像 李华
网站建设 2026/4/12 3:21:55

终极指南:用Python实现Xcode项目自动化管理

终极指南:用Python实现Xcode项目自动化管理 【免费下载链接】mod-pbxproj A python module to manipulate XCode projects 项目地址: https://gitcode.com/gh_mirrors/mo/mod-pbxproj 还在为手动配置Xcode项目而烦恼吗?pbxproj模块正是你需要的解…

作者头像 李华