原 編譯go及go get進度顯示

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

一、首先附上編譯完成能顯示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的命令. 問題迎刃而解:

  1. 修改git clone命令, 添加 --progress選項, 使其輸出進度
  2. 修改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.Buffercmd.Stdout = &bufcmd.Stderr = &bufcmd.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:

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.