解决离线环境下go语言项目依赖问题

  1. 新建项目目录及go文件,将需要移植到内网的依赖包包名写入go文件中。
  2. 然后利用go mod vendor命令,将依赖包打包到当前项目所在目录。
  3. 将当前项目目录下的vendor目录、go.modgo.sum三个东西拷贝到离线电脑中。

新建项目目录offline_project(该名字为举例,实际随意),将前面第三步拷贝的三个东西拷贝进来,新建go文件,需要用到什么包就导入什么包(如果导入的是第三方包前提是该包已经打包进了vendor目录中) 注意事项Offline端,import的包如果只是vendor中的个别包,则go.modgo.sum可能会出现红点,不能再使用go mod命令去整理了,且不要担心编译时会将vendor中的依赖包全部编译进去。

要复用移植的第三方包,先将项目目录offline_project中除vendorgo.modgo.sum之外原有的项目文件(主要是go文件)移出当前目录或者更改后缀,然后再新建go文件。

包名 说明 用途
gorm.io/gorm 有中文文档 数据库操作
gorm.io/driver/sqlite 数据库操作
gorm.io/driver/mysql 数据库操作
github.com/mattn/go-sqlite3 数据库操作
github.com/go-pg/pg/v10 PostgreSQL client and ORM for Golang 数据库操作
github.com/lib/pq A pure Go postgres driver for Go’s database/sql package 数据库操作
github.com/marcboeker/go-duckdb A database/sql driver for the DuckDB database engine. 数据库操作
github.com/go-sql-driver/mysql 数据库操作
github.com/imroc/req/v3 国人开发的强大网络请求库,有中文文档 网络请求
github.com/gocolly/colly/v2 语法简单但是无详细文档的爬虫框架,能请求能解析 网络请求
github.com/tidwall/gjson json解析库 数据解析
github.com/bytedance/sonic 字节跳动出品的最快json解析库,各项性能遥遥领先 数据解析
github.com/xuri/excelize/v2 字节跳动出的excel库,有中文文档 数据解析
github.com/rocketlaunchr/dataframe-go 导入导出: CSV, JSONL, Parquet, MySQL ,PostgreSQL 数据解析
github.com/PuerkitoBio/goquery html数据解析,类似于jQuery或者beautifulsoup ,colly自带该解析库 数据解析
github.com/gin-gonic/gin 有中文文档 WEB框架
https://sourceforge.net/projects/mingw-w64/files/ GCC编译依赖,需要选择合适的版本,i686纯32位版,供32位win系统使用;x86_64是64位系统用的版本;seh结尾是纯64位编译;sjlj结尾是32 64两种编译,需加-m32或-m64参数;posix通常用于跨平台,比win32兼容性好一些。我下载的是:x86_64-posix-sjlj(这个已经编译好了解压完就能用) MinGW-W64 GCC
github.com/spf13/viper 配置文件读写库 文件解析
github.com/coloraven/lancet 工具函数库,fork自https://github.com/duke-git/lancet/tree/main,添加一些自己的工具

go-offline-packager https://pkg.go.dev/github.com/go-sharp/go-offline-packager#section-readme https://gist.github.com/gmolveau/f09c1038ca622620e54d0579ba06ea96 以下为备份

  • copy go.mod and go.sum files from the offline PC to the internet PC
  • create a folder on the internet PC
  • create a go module : go mod init test
  • create a offline_modules.go file :
1
2
3
package offline_modules

func main() {}
  • add the dependencies you want to download (use _) :
1
2
3
4
5
6
7
8
package offline_modules

import (
	_ "github.com/gorilla/mux"
	_ "github.com/sirupsen/logrus"
)

func main() {}
  • run go mod vendor

  • the vendor folder should have new folders in it representing dependencies

  • copy go.mod, go.sum and vendor
  • paste them on your offline PC, edit go.mod module name if necessary
  • run your go commands with the flag -mod=vendor like go run -mod=vendor main.go