1. 程式人生 > >CentOS6.8配置GO語言開發環境

CentOS6.8配置GO語言開發環境

應用程序 編程語言 處理器 谷歌 export

導讀Go語言是谷歌2009發布的第二款開源編程語言,Go語言專門針對多處理器系統應用程序的編程進行了優化,使用Go編譯的程序可以媲美C或C++代碼的速度,而且更加安全、支持並行進程。

技術分享

鑒於越來越多的開源項目都采用Go為開發語言,本文介紹Linux(CentOS 6.8)下GO開發環境的搭建與使用。

一、Go安裝使用

1、下載Go源碼包

https://storage.googleapis.com/golang/go1.6.3.linux-amd64.tar.gz

上傳到/usr/local/src目錄下

2、編譯安裝Go到/usr/local

tar zxvf go1.6.3.linux-amd64.tar.gz -C /usr/local/

#註:必須使用root賬戶或者使用sudo來解壓縮Go源碼包

3、設置PATH環境變量,添加/usr/local/go/bin到環境變量

export PATH=$PATH:/usr/local/go/bin

4、安裝到自定義位置

Go二進制文件默認安裝到/usr/local/go,但是可以安裝Go工具到不同的位置,可以自行定義,只需要設置正確的環境變量。

例如,安裝Go到家目錄下,必須添加環境變量到$HOME/.profile

export GOROOT=$HOME/go

export PATH=$PATH:$GOROOT/bin

註:安裝Go到其他目錄時,GOROOT必須設置為環境變量

5、檢查是否正確安裝程序

通過設置一個工作區和建立一個簡單的程序,檢查是否正確安裝了一個簡單的程序。創建一個目錄包含您的工作空間,例如/data/work,並設置GOPATH環境變量指向的位置。

export GOPATH=/data/work

#如果不存在/data/work,需要新建

然後,在你的工作內創建src/github.com/user/hello,如果使用github,可以使用自己的用戶名代替user,在hello目錄下,新建hello.go

# cat hello.go
package main
import "fmt"
func main {
fmt.Printf("hello,world!\n")
}

#使用go編譯hello.go

go install github.com/user/hello

#上面的命令講名叫hello(or hello.exe)的程序放到你的工作區內,執行下面命令,會得到輸出結果。

$GOPATH/bin/hello

hello,world!

#當出現hello,world!表明Go已經安裝成功可以工作。

二、Go工作區介紹

1、機構組織代碼概述

Go語言程序通常將所有的代碼保存在一個工作區中。

工作區包含許多版本控制庫(由Git管理)。

每個存儲庫包含一個或多個包。

每個包由一個或多個在一個目錄中的源文件組成。

一個包的目錄的路徑決定其導入路徑。

註:同於其他的編程環境中,每一個項目都有一個獨立的工作區且工作區是緊密聯系在一起的版本控制庫。

2、工作區介紹

工作區是一個目錄層次結構,它的根目錄有三個目錄:

src 包含Go源文件

pkg 包含對象和包

bin 包含可執行命令
Go工具創建源碼包並安裝二進制文件到pkg和bin目錄下
src目錄通常包含多個版本控制庫(如Git或Mercurial),跟蹤一個或多個源包的開發。
下面展示一個好的工作區的例子:

bin/
hello                          # command executable
outyet                         # command executable
pkg/
linux_amd64/
github.com/golang/example/
stringutil.a           # package object
src/
github.com/golang/example/
.git/                      # Git repository metadata
hello/
hello.go               # command source
outyet/
main.go                # command source
main_test.go           # test source
stringutil/
reverse.go             # package source
reverse_test.go        # test source
golang.org/x/image/
.git/                      # Git repository metadata
bmp/
reader.go              # package source
writer.go              # package source
... (many more repositories and packages omitted) ...


上面的屬性圖展示了一個包含兩個存儲庫(example和image)的工作區,example 存儲庫包含兩個命令(hello,outyet),image庫包含bmp包和幾個其他的包。

一個典型的工作區包含包含許多軟件包和命令的多個源庫。大多數程序員將所有的源代碼和依賴關系保存在一個工作區中

3、GOPATH環境變量設置

GOPATH環境變量指定工作區的位置。它很可能是唯一的環境變量,代碼開發時需要設置。

開始,創建一個工作區目錄並設置相應的gopath。您的工作區可以位於任何你喜歡的地方,但我們將在這個文檔中使用/data/work。請註意,這不能是您的“Go安裝”路徑相同。

mkdir -p /data/work

export GOPATH=/data/work

為了方便。添加工作區的bin到PATH中

export PATH=$PATH:$GOPATH/bin

4、導入路徑

一個導入路徑是唯一標識一個包的字符串。一個包的導入路徑對應於它在工作區內或遠程存儲庫中的位置。

從標準庫的軟件包中給出了短的導入路徑等。對於您自己的包,您必須選擇不可能和未來添加到標準庫或其他外部庫的基礎路徑沖突的路徑。

註意,你不需要將你的代碼發布到一個遠程存儲庫之前,你可以建立它。這只是一個很好的習慣來組織你的代碼,如果你有一天會出版它。在實踐中,你可以選擇任何任意的路徑名稱,只要它是唯一的標準庫和更大的去生態系統。

我們將使用github.com/user作為我們的基本路徑。在您的工作區中創建一個目錄,以保持源代碼:

mkdir -p $GOPATH/src/github.com/user

5、第一個項目

編譯並運行一個簡單的程序,首先選擇一個包的路徑(我們將使用github.com/user/hello)和創建在您的工作區相應的軟件包目錄:

mkdir $GOPATH/src/github.com/user/hello

創建名叫hello.go的文件,上面創建過,此處略過。

cd $GOPATH/src/github.com/user/hello
go install
$GOPATH/bin/hello

或者:

hello

如果你使用的是一個源代碼管理系統,現在是一個很好的時間來初始化一個存儲庫,添加文件,並提交你的第一次更改。再次,這一步是可選的:您不需要使用源代碼管理來寫代碼。

cd $GOPATH/src/github.com/user/hello

git init

Initialized empty Git repository in /data/work/src/github.com/user/hello/.git/

git add hello.go

git commit -m "first commit"

[master (root-commit) bbfb477] first commit

6、first library

mkdir $GOPATH/src/github.com/user/stringutil

下一步,在目錄下創建一個名為reverse.go文件中有下列內容:

// Package stringutil contains utility functions for working with strings.

package stringutil

// Reverse returns its argument string reversed rune-wise left to right.

func Reverse(s string) string {

r := []rune(s)

for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {

r[i], r[j] = r[j], r[i]

}

return string(r)

}

使用go build測試包的編譯

$ go build github.com/user/stringutil

如果當前位置源碼包目錄,只需要:

go build

上面操作並不會產生一個輸出文件,必須使用go install,把包和對象輸出到工作去的pkg目錄內

確認stringutil包創建完成後,修改原始hello.go,使用stringutil包:

package main

import (

"fmt"

"github.com/user/stringutil"

)

func main() {

fmt.Printf(stringutil.Reverse("\n !oG ,olleH"))

}

無論使用go安裝包還是二進制文件,所有相關的依賴都會自動安裝。所以當你安裝hello程序時:

$ go install github.com/user/hello

對應的stringutil包會自動安裝好。

執行新的hello程序,可以看到消息已經被反轉

# hello

Hello, Go!

完成上面操作之後,工作區應該為:

├── bin

│   └── hello                    # command executable

├── pkg

│   └── linux_amd64             # this will reflect your OS and architecture

│       └── github.com

│           └── user

│               └── stringutil.a   # package object

└── src

└── github.com

└── user

├── hello

│   └── hello.go     # command source

└── stringutil

└── reverse.go   # package source

註意:go install會把庫文件stringutil.a放到pkg/linux_amd64下邊(目錄結構跟源代碼結構一樣)。這樣可以go命令可以直接找到對應的包對象,避免不必要的重復編譯。linux_amd64是為了根據操作系統和你的系統架構交叉編譯。

所有Go可執行程序都通過靜態方式鏈接在一起,所以在運行時是不需要相關的包對象(庫)。

7、包命令

所有的Go源代碼都以下面的語句開始:

package name

其中name就是包引用默認的名稱,一個包中的所有文件必須使用同一個包名,可執行命令必須是main。

一個二進制文件下所有的包名不需要唯一,但是引用路徑必須唯一

8、測試

Go自帶了一個輕量級的測試框架,由go test和testing包組成。

可以通過新建xx_test.go寫一個測試,其中包含若幹個TestXXX函數。測試框架會自動執行這些函數;如果函數中包含tError或t.Fail, 對應的測試會被判為失敗。

添加一個針對stringutil的測試文件$GOPATH/src/github.com/user/stringutil/reverse_test.go,包含以下內容:

package stringutil

import "testing"

func TestReverse(t *testing.T) {

cases := []struct {

in, want string

}{

{"Hello, world", "dlrow ,olleH"},

{"Hello, 世界", "界世,olleH"},

{"", ""},

}

for _, c := range cases {

got := Reverse(c.in)

if got != c.want {

t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want)

}

}

}

#通過go test測試

# go test github.com/user/stringutil

ok  github.com/user/stringutil   0.002s

#同樣的,在包文件夾下可以忽略路徑而直接執行go test

[[email protected] stringutil]# go test

PASS

ok  github.com/user/stringutil   0.002s

9、遠程包

包的引用路徑用來描述如何通過版本控制系統獲取包的源代碼。go工具通過引用路徑自動從遠程代碼倉庫獲取包文件。比如本文中用的例子也對應的保存在github.com/golang/example下。go可以通過包的代碼倉庫的url直接獲取、生成、安裝對應的包。

[[email protected] ~]# go get github.com/golang/example/hello

[[email protected] ~]# $GOPATH/bin/hello

Hello, Go examples!

如果工作區中不存在對應的包,go會將對應的包放到GOPATH環境變量指明的工作區下。(如果包已經存在,go跳過代碼拉去而直接執行go install)

執行上邊的go get命令後,工作空間文件夾下是這樣的結果:

技術分享

github上的hello命令依賴於同個倉庫下的stringutil庫,hello.go使用同樣的路徑進行導入,所以go get命令能夠直接找到並安裝對應的依賴包。

import "github.com/golang/example/stringutil"

#通過這種方式共享Go包最好。

#註:關於go工具遠程包的更多信息,參考:https://golang.org/cmd/go/#hdr-Remote_import_paths

10、官方地址

Go高效編程:https://golang.org/doc/effective_go.html

Go編程實例:https://tour.golang.org/welcome/

本文原創地址:http://www.linuxprobe.com/set-go-env.html


本文出自 “小華的博客” 博客,請務必保留此出處http://coderhsf.blog.51cto.com/12629645/1927726

CentOS6.8配置GO語言開發環境