原 编译go及go get进度显示
tantexian · · 6521 次点击 · · 开始浏览一、首先附上编译完成能显示go get进度的Go包:
centos7直接解压版go:http://pan.baidu.com/s/1mik3cI8
windows7直接解压版go:http://pan.baidu.com/s/1jIaxKEE
一、编译之前修改go get进度显示:
因为beego在github.com上的包有点大, 所以 go get github.com/leanote/leanote/app 会很慢, 这个会执行几分钟或更长, 不知道的朋友还以为卡死了. 找了下 go get 没有一个选项可以输出进度的, 于是决定修改golang源码(别以为很有技术含量, 还不是go代码?).
看了下golang的源码 src/cmd/go 下是go命令的源码, 其中, get.go是go get命令的代码, build.go 是go build的代码.
刚开始走了点弯路, 想着改变get.go来显示进度, 无果之后想了下, go get 其实就是调用git , hg, svn的命令从仓库中下载的, 由此思路找到vcs.go(vcs全称为version control system), 果然这里面包含了调用git, hg, svn的命令. 问题迎刃而解:
- 修改git clone命令, 添加 --progress选项, 使其输出进度
- 修改cmd.Run()执行的地方, 使其将输出定位到标准输出流上
1. 修改git clone命令, 找到如下代码, 在createdCmd修改为 clone --progress {repo} {dir}
其它命令hg, svn...添加进度方法类似
// vcsGit describes how to use Git.var vcsGit = &vcsCmd{
name: "Git",
cmd: "git",
createCmd: "clone {repo} {dir}", // 此处修改为 clone --progress {repo} {dir}
downloadCmd: "pull --ff-only"}
2. 重定向输出流
找到run1()方法, 在 cmd.Stderr = &buf 下添加两行, 如:
var buf bytes.Buffer cmd.Stdout = &buf cmd.Stderr = &buf cmd.Stdout = os.Stdout // 重定向标准输出 cmd.Stderr = os.Stderr // 重定向标准输出 err = cmd.Run()
Ok, 搞定, 接下来执行golang源码 src下的 all.bash 重新编译golang, 编译要些时间, 编译完后使用go get 试试:
看到进度条就不用担心了吧.
之前修改golang源码使其关闭变量未使用, 包未使用的错误 :
关闭golang的 variable declared but not used 和 package imported but not used
二:window7下面编译Go:
复制一份go源码:
设置GOROOT_BOOTSTRAP=C:\Go1.7
环境变量设置完毕需要重启生效!!!
下载安装:MinGW - Minimalist GNU for Windows
https://sourceforge.net/projects/mingw/
也可以直接下载TDM-GCC MinGW Compiler
添加到path中:
set PATH=.;C:\TDM-GCC-64\bin\
三:Centos7下面编译Go:
linux同理,执行编译脚本为src下的sh all.bash
编译完毕,执行go get:
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
一、首先附上编译完成能显示go get进度的Go包:
centos7直接解压版go:http://pan.baidu.com/s/1mik3cI8
windows7直接解压版go:http://pan.baidu.com/s/1jIaxKEE
一、编译之前修改go get进度显示:
因为beego在github.com上的包有点大, 所以 go get github.com/leanote/leanote/app 会很慢, 这个会执行几分钟或更长, 不知道的朋友还以为卡死了. 找了下 go get 没有一个选项可以输出进度的, 于是决定修改golang源码(别以为很有技术含量, 还不是go代码?).
看了下golang的源码 src/cmd/go 下是go命令的源码, 其中, get.go是go get命令的代码, build.go 是go build的代码.
刚开始走了点弯路, 想着改变get.go来显示进度, 无果之后想了下, go get 其实就是调用git , hg, svn的命令从仓库中下载的, 由此思路找到vcs.go(vcs全称为version control system), 果然这里面包含了调用git, hg, svn的命令. 问题迎刃而解:
- 修改git clone命令, 添加 --progress选项, 使其输出进度
- 修改cmd.Run()执行的地方, 使其将输出定位到标准输出流上
1. 修改git clone命令, 找到如下代码, 在createdCmd修改为 clone --progress {repo} {dir}
其它命令hg, svn...添加进度方法类似
// vcsGit describes how to use Git.var vcsGit = &vcsCmd{
name: "Git",
cmd: "git",
createCmd: "clone {repo} {dir}", // 此处修改为 clone --progress {repo} {dir}
downloadCmd: "pull --ff-only"}
2. 重定向输出流
找到run1()方法, 在 cmd.Stderr = &buf 下添加两行, 如:
var buf bytes.Buffer cmd.Stdout = &buf cmd.Stderr = &buf cmd.Stdout = os.Stdout // 重定向标准输出 cmd.Stderr = os.Stderr // 重定向标准输出 err = cmd.Run()
Ok, 搞定, 接下来执行golang源码 src下的 all.bash 重新编译golang, 编译要些时间, 编译完后使用go get 试试:
看到进度条就不用担心了吧.
之前修改golang源码使其关闭变量未使用, 包未使用的错误 :
关闭golang的 variable declared but not used 和 package imported but not used
二:window7下面编译Go:
复制一份go源码:
设置GOROOT_BOOTSTRAP=C:\Go1.7
环境变量设置完毕需要重启生效!!!
下载安装:MinGW - Minimalist GNU for Windows
https://sourceforge.net/projects/mingw/
也可以直接下载TDM-GCC MinGW Compiler
添加到path中:
set PATH=.;C:\TDM-GCC-64\bin\
三:Centos7下面编译Go:
linux同理,执行编译脚本为src下的sh all.bash
编译完毕,执行go get: