Total Pageviews

Thursday 29 April 2021

go项目的管理神器glide

 当我们从github下载开源的go项目时,开源项目一般都会引入很多其它的开源库,这样我们直接去编译的时候就会提示缺少哪些库,然后一个一个用go get命令安装上,这样是在浪费生命啊!使用glide直接一键安装,还可以管理依赖包的版本号,这样当相关依赖包进行了重大升级时,我们也不怕


Install glide

方法一: 使用go get安装

go get github.com/Masterminds/glide


方法二: 使用官方安装脚本:

curl https://glide.sh/get | sh


方法三: 使用系统自带的安装软件

# mac osx

brew install glide

#arch linux

pacman -S glide


使用

$ glide create                            # Start a new workspace

$ vim glide.yaml                         # and edit away!

$ glide get github.com/Masterminds/cookoo # Get a package and add to glide.yaml

$ glide install                           # Install packages and dependencies

# work, work, work

$ go build                                # Go tools work normally

$ glide up                                # Update to newest versions of the package

glide create(或init)

初始化一个开发环境。在初始化过程中,会自动创建glide.yaml文件,并会尝试猜测依赖包的版本号,并将其写入yaml配置文件中。比如,你的项目使用的Godep管理的,glide会自动探测Godep使用的版本号。

$ glide create

[INFO] Generating a YAML configuration file and guessing the dependencies

[INFO] Attempting to import from other package managers (use --skip-import to skip)

[INFO] Scanning code to look for dependencies

[INFO] --> Found reference to github.com/Masterminds/semver

[INFO] --> Found reference to github.com/Masterminds/vcs

[INFO] --> Found reference to github.com/codegangsta/cli

[INFO] --> Found reference to gopkg.in/yaml.v2

[INFO] Writing configuration file (glide.yaml)

[INFO] Would you like Glide to help you find ways to improve your glide.yaml configuration?

[INFO] If you want to revisit this step you can use the config-wizard command at any time.

[INFO] Yes (Y) or No (N)?

n

[INFO] You can now edit the glide.yaml file. Consider:

[INFO] --> Using versions and ranges. See https://glide.sh/docs/versions/

[INFO] --> Adding additional metadata. See https://glide.sh/docs/glide.yaml/

[INFO] --> Running the config-wizard command to improve the versions in your configuration

glide install

要安装glide.lock文件里面的特定版本的依赖包,使用glide install命令


$ glide install

这个命令会读取glide.lock文件,并会安装特定commit id的版本到此目录下面的vender文件夹中,如果这个文件不存在,运行glide install时将会执行一次update并生成lock文件


使用实例

cd $GOPATH/src

git clone https://github.com/xtaci/kcptun.git

cd kcptun

glide create

glide install

cd server

go build

说明

一定要放到$GOPATH/src目录下面,要不go build找不到vender目录下面的依赖包。这个是由于go build查找相应的依赖包的机制有关

不要直接用go build, 这样会带上debug信息,生成的可执行文件非常大,使用下面命令编译,不带上debug信息


go build -ldflags "-s -w"

使用-s选项后安装包还是非常大,我们再使用upx工具对其进行终极压缩,可以缩小几倍


安装goupx

$ pacman -S upx

$ go get github.com/pwaller/goupx

编译大小对比,upx可以对可以执行文件进行压缩并进行一些混淆,这里主要用来作为压缩功能。此处压缩后的大小与gz压缩后的大小差不多


$ go build

$ ls -lh

total 9.5M

-rw-r--r-- 1 vagrant vagrant 1.2K May 30 23:53 config.go

-rw-r--r-- 1 vagrant vagrant  11K May 30 23:53 main.go

-rwxr-xr-x 1 vagrant vagrant 9.5M May 31 00:06 server

-rw-r--r-- 1 vagrant vagrant  391 May 30 23:53 signal.go


$ go build -ldflags "-s -w"

$ ls -lh

total 6.4M

-rw-r--r-- 1 vagrant vagrant 1.2K May 30 23:53 config.go

-rw-r--r-- 1 vagrant vagrant  11K May 30 23:53 main.go

-rwxr-xr-x 1 vagrant vagrant 6.4M May 31 00:06 server

-rw-r--r-- 1 vagrant vagrant  391 May 30 23:53 signal.go


$ goupx server

2017/05/31 00:06:24 {Class:ELFCLASS64 Data:ELFDATA2LSB Version:EV_CURRENT OSABI:ELFOSABI_NONE ABIVersion:0 ByteOrder:LittleEndian Type:ET_EXEC Machine:EM_X86_64 Entry:4570928}

2017/05/31 00:06:24 File fixed!

                       Ultimate Packer for eXecutables

                          Copyright (C) 1996 - 2017

UPX 3.94        Markus Oberhumer, Laszlo Molnar & John Reiser   May 12th 2017

        File size         Ratio      Format      Name

   --------------------   ------   -----------   -----------

   6644512 ->   2400840   36.13%   linux/amd64   server


Packed 1 file.

$ ls -lh

total 2.4M

-rw-r--r-- 1 vagrant vagrant 1.2K May 30 23:53 config.go

-rw-r--r-- 1 vagrant vagrant  11K May 30 23:53 main.go

-rwxr-xr-x 1 vagrant vagrant 2.3M May 31 00:06 server

-rw-r--r-- 1 vagrant vagrant  391 May 30 23:53 signal.go

No comments:

Post a Comment