2026/1/8 11:42:49
网站建设
项目流程
网站开发代码无中文,发布做网站需求qq群,在家里怎样做网站,电商网站开发流程图前阵子我做了一个小工具#xff1a;一个完全离线的手机号归属地查询桌面应用
功能本身其实并不复杂#xff0c;但在这个过程中#xff0c;我反而重新认识了一次
用 Go 做桌面应用#xff0c;其实可以非常像在写一个 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 vueWails 支持的模板其实不少React、Vue、Svelte 都有翻一翻文档基本都能找到这里就不展开了。和传统 Web 最大的不同没有路由如果你是做 Web 开发的上手 Wails 会非常快。传统 Web 项目里我们习惯的是Router路由 → HandlerHTTP处理器 → Service业务逻辑层 → Repository模型访问层 → Model数据模型请求通过路由分发到 Handler再一层层往下走。而在 Wails 里不需要路由app.go里的方法会自动暴露给前端前端直接把它当成一个函数来调用换个角度看app.go里的方法其实就相当于传统 Web 里的 Router Handler至于 Service、Repository、Model 这些分层完全可以照搬。只是“请求”不再是 HTTP而是一次本地方法调用。这个点让我感觉非常舒服开发思路几乎没变只是把“接口”换成了函数。48 万条数据SQLite 该怎么放这个项目里有一个比较现实的问题我内置了 48 万多条手机号号段数据。SQLite 本身非常适合这种场景但如果在应用启动时再一条条初始化写入数据库体验会非常糟糕。所以我的做法是提前生成一个完整的.db文件在构建时通过embed.FS把这个数据库文件带进程序程序启动时如果用户本地还没有数据库就直接把这份已经初始化好的.db拷贝过去这样一来启动速度很快不需要额外初始化逻辑数据也完全可控、可更新这一步做完后面的事情就简单很多了。当然考虑到数据会更新我预留了构建脚本方便开发过程中构建这个 .db 文件开发体验真的很像在写 Web剩下的开发过程基本就是“Web 开发的本地版”Go 这边写好查询服务在app.go封装成方法前端直接调用不需要网络请求wails build一次性完成前端打包后端编译桌面应用生成项目放在 GitHub 上之后再配合 GitHub Actions就可以自动构建 Windows / macOS 的可执行文件整个流程非常顺。一个很小的项目但这个思路很实用这个项目本身并不复杂代码量也不多我也尽量写了比较完整的注释。如果你想试试用 Go 写桌面应用又或者只是需要一个离线的手机号归属地查询工具都可以看看这个项目或者直接下载编译好的程序来用。项目地址在这里 https://github.com/zxc7563598/go-mobile-locator有时候换一种“应用形态”反而能让很多原本别扭的问题一下子顺起来。