最近在找一个将 html 转化为 md 的工具,后来发现 html2md 这个项目还不错,打算基于它做些改造。不过 html2md 是个 golang 项目,而我自己不想在电脑上安装 golang 环境,故便考虑通过 docker 来编译这个项目。以下对过程做些记录。
说明:下文中的
$go-lab
为自己电脑上的某个目录。
docker 中安装 golang 环境
下载镜像
1 | docker pull golang |
新建 gopath 目录及项目源码目录 projects,将在运行容器时做映射
1 | docker 中默认 /go 为 gopath |
需要将项目源码目录与 gopath 目录分开,这是 go mod 的要求。
进入 projects
下载 html2md 项目源码
1 | cd $go-lab/projects |
在 docker 容器中运行
运行容器并进入容器
1 | cd $go-lab |
在容器中设置环境变量
1 | go env -w GOPROXY=https://goproxy.cn,direct |
关键:GOPROXY 代理最好要设置,因为 golang 的许多依赖是被 GFW 给墙了,不设置带来会导致依赖无法下载。
编译 go mod 管理的项目
下载依赖
1 | cd /root/html2md |
go mod init project_name
: 用 go mod 初始化目录
go mod tidy
: 会同步依赖包,添加需要的,移除多余的
go mod download
:下载依赖
go clean -modcache
: 清除缓存
编写 golang 项目,引用 html2md 库
1 | mkdir $go-lab/demo |
html2md.go
文件内容如下
1 | package main |
编译项目
1 | go build html2md.go |
编译完成后,在目录下生成 html2md 可执行文件。
测试 html2md 工具
1 | html2md code.html code.md |
查看是否正确生成 code.md
交叉编译
golang 提供了完备的交叉编译环境。docker 中直接通过 go build
生成的执行文件只能在 linux 环境下运行。通过交叉编译,可以很方便的编译在 mac 或者 windows 下运行的可执行文件。
1 | 编译 mac 可用的可执行文件,生成 html2md |