[TOC] # 如何使用RAM磁盘编译Go代码的速度提高40% Go已经因其令人印象深刻的编译速度而闻名。但是如果你来自一种几乎没有编译时间的脚本语言,你可能会感到不满意。这是运行`go build main.go`几次预热文件系统后的编译时间。 `real 0m2.590s user 0m2.685s sys 0m0.775s` 当文件未缓存时,它容易慢2到3倍。如果您的磁盘正在经历大量使用,可能会发生这种情况。这是从RAM磁盘编译时的编译时间。高出40%;差不多一秒钟了。 `real 0m1.871s user 0m2.124s sys 0m0.380s` 这是让事情有效的bash脚本: `#!/bin/sh if [ ! -d ~/ramdisk ]; then mkdir ~/ramdisk fi sudo mount -t tmpfs -o size=512M tmpfs ~/ramdisk rsync -ah ~/go ~/ramdisk/ rsync -ah --exclude '.git' ~/path/to/project ~/ramdisk export GOPATH=$HOME/ramdisk/go` 这将在主文件夹下创建一个目录〜/ ramdisk。然后分配512MB磁盘空间并将其安装在RAM上。rsync调用将所有Go文件和项目文件复制到RAM磁盘。最后,它将GOPATH设置为〜/ ramdisk下的新Go路径。 下一步是将所有文件更改反映到RAM磁盘,而不是直接在其上编辑文件。这样您就不必担心失去工作。为此,我们需要一个工具来监视文件更改并自动复制文件。您可以使用任何您喜欢的工具,例如inotify,fswatch,nodemon等。我将使用[xnotify](https://github.com/AgentCosmic/xnotify),这是一个可以帮助构建过程的高级工具。 `./xnotify --verbose -i . --base /home/vagrant/ramdisk/project --batch 50 -- go build cmd/main.go -- ./main | xargs -L 1 ./copy.sh` copy.sh: `#!/bin/sh NAME=$2 SRC=/path/to/project/$NAME if [ -f $SRC ]; then echo Copying: $NAME cp $SRC ~/ramdisk/project/$NAME fi` 上面的命令基本上将文件复制到RAM磁盘并`go build cmd/main.go && ./main`在文件更改时运行。现在,如果我们想要停止使用RAM磁盘,我们只需运行此脚本: `#!/bin/sh sudo lsof -n ~/ramdisk sudo umount ~/ramdisk rm ~/ramdisk -r export GOPATH=$HOME/go`