Go源码编译

Building Go from Source

原文作者:Carolyn Van Slyck This is a part of a larger effort that I’m calling GopherSource, and our goal is for more of the gopher community to become upstream Go contributors.

This is a part of a larger effort that I’m calling GopherSource, and our goal is for more of the gopher community to become upstream Go contributors.

Before we can become Go contributors, the very first step is being able to build Go from source. I followed the official doc and filled in the blanks a bit to figure out how to get everything working.

Go is compiled with … Go! ? Since I already have Go 1.10 installed on my computer, I decided to use that. Another option is to bootstrap Go, Karen Carcamo wrote up how to do that on Linux.

Here is the tldr of how to download the Go source and build it:

1. Clone the Go repository, it doesn’t have to be in your GOPATH.

1 git clone https://go.googlesource.com/go

If you want to build a specific version of Go, now’s the time to checkout that version using a tag, for example git checkout go1.10.3. Since we want to try out new features, namely Go Modules (the prototype formerly known as vgo), I am going to use the latest changes on the master branch. If you just cloned, you can skip this step since you already have the latest changes.

1 git checkout master
2 git pull

2. Compile Go! If you are on Windows, use make.bat instead.

 1 $ cd src
 2 $ ./make.bash
 3 Building Go cmd/dist using /usr/local/Cellar/go/1.10.3/libexec.
 4 Building Go toolchain1 using /usr/local/Cellar/go/1.10.3/libexec.
 5 Building Go bootstrap cmd/go (go_bootstrap) using Go toolchain1.
 6 Building Go toolchain2 using go_bootstrap and Go toolchain1.
 7 Building Go toolchain3 using go_bootstrap and Go toolchain2.
 8 Building packages and commands for darwin/amd64.
 9 ---
10 Installed Go for darwin/amd64 in /Users/carolynvs/src/go
11 Installed commands in /Users/carolynvs/src/go/bin

3. Open a new shell session. Now prepend the bin directory from the output above to your PATH so that you are using your custom go binary by default.

1 export PATH=/Users/carolynvs/src/go/bin:$PATH

On Windows use this command instead:

1 $env:PATH = "/Users/carolynvs/src/go/bin;"+$env:PATH

Make sure to replace /Users/carolynvs/src/go with the location where you cloned the Go repository.

4. Use the version command to verify that you are now using your custom build of Go.

1 $ go version
2 go version devel +a12c1f26e4 Tue Jun 26 20:00:51 2018 +0000 darwin/amd64

Now that we have the latest version of Go, let’s try it out and use a new feature that has been added to Go 1.11, Go Modules! Go Modules is the official name going forward for the vgo prototype and is the next step in the evolution of dependency management in Go.

Luckily, you don’t need to know what that is in order to see it in action. Now when you run go build, Go will take care of retrieving your dependencies, not just master but even a specific version or commit! ?

1. Clone my test repository, ANYWHERE YOU LIKE! Doesn’t have to be in the GOPATH.

1 git clone https://github.com/carolynvs/go-depmgmt-testrepo

2. My repo relies upon external code that isn’t checked into the vendor directory. When you run the code, Go retrieves v0.8.0 of the errors package before building.

1 $ go run main.go
2 go: finding github.com/pkg/errors v0.8.0
3 go: downloading github.com/pkg/errors v0.8.0
4 hello world!

There are some extra debug lines printed in the output, those are from the new Go modules feature:

1go: finding github.com/pkg/errors v0.8.0
2go: downloading github.com/pkg/errors v0.8.0

3. Try running the code again, and you won’t see those extra lines.

1 $ go run main.go
2 hello world!

Go downloaded the dependency and cached it in $GOPATH/src/mod. Next time you build, Go will retrieve that package from its cache.

 1 $ tree ~/go/src/mod
 2 ~/go/src/mod
 3 ├── cache
 4 │   ├── download
 5 │   │   └── github.com
 6 │   │       └── pkg
 7 │   │           └── errors
 8 │   │               └── @v
 9 │   │                   ├── list
10 │   │                   ├── v0.8.0.info
11 │   │                   ├── v0.8.0.mod
12 │   │                   ├── v0.8.0.zip
13 │   │                   └── v0.8.0.ziphash
14 └── github.com
15     └── pkg
16         └── errors@v0.8.0
17             ├── LICENSE
18             ├── README.md
19             ├── appveyor.yml
20             ├── bench_test.go
21             ├── errors.go
22             ├── errors_test.go
23             ├── example_test.go
24             ├── format_test.go
25             ├── stack.go
26             └── stack_test.go

We will go into more detail about Go modules and what’s happening under the covers in the next blog post!

? Step 1 of becoming a real Go contributor accomplished! ?

If you’d like to play with Go Modules more, a bunch of friendly gophers are sharing what we learn as we go along and you can join us in the Go forums in the Exploring Go Modules thread. Otherwise if you want all the info but don’t have time to play, I will do a followup post in a few days summarizing what we discover.

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2018-07-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏bboysoul

关于linux下raid的设备文件和格式化

今天给dell t20装了zstack,没错zstack镜像底层其实就是centos,服务器里面有四块硬盘,一块300g的我是做系统盘的,三块1T的硬盘我是打算...

15020
来自专栏bboysoul

制作免杀windows木马(Winpayloads )

下载 git clone https://github.com/nccgroup/Winpayloads.git cd Winpayloads 安装 c...

12110
来自专栏积累沉淀

Spark安装

我的安装版本是spark-1.6.1-bin-hadoop2.6.tgz   这个版本必须要求jdk1.7或者1.7以上 安装spark必须要scala-2.1...

24470
来自专栏Golang语言社区

一个用Go编写的WIP最小文本编辑器

Phi is a minimal code editor designed to look pretty, run fast, and be easy to c...

14320
来自专栏分布式系统进阶

Librdkafka的Transport层

rd_kafka_recv按kafka的协议来收包, 先收4字节,拿到payload长度, 再根据这个长度收够payload内容, 这样一个完整的respons...

27110
来自专栏乐沙弥的世界

基于Innobackupex的MySQL备份脚本

    Innobackupex是Xtrabackup的一部分,其实质也是调用xtrabackup。主要的不同是Xtrabackup除了支持innodb引擎外还...

10710
来自专栏运维

CentOS6.3 x86_64位安装xfce4桌面vncserver服务

CentOS6.3 x86_64位安装xfce4桌面vncserver服务 注意这里用的是最小化安装纯净系统212个包CentOS-6.3-x86_64-...

18210
来自专栏Python爱好者

MarkDown简单使用A First Level Header

15970
来自专栏黑泽君的专栏

常用的 default.properties 文件 + 常用的 struts-default.xml 文件 + 常用的 struts-plugin.xml 文件 + 常用的 struts.xml 文件

常用的 default.properties 文件,所在位置:\struts-2.3.15.3-all\struts-2.3.15.3\apps\struts2...

11240
来自专栏Python与爬虫

佛系编程[如何创建一个安全可靠的应用程序]

推荐最近在GitHub上很火的一个项目,按照介绍,你也可以创建一个安全可靠的应用程序 项目地址在>>> nocode https://github.com/k...

46990

扫码关注云+社区

领取腾讯云代金券