C++的代碼的組織嘱根,依賴的管理規(guī)定幾乎為零髓废。學(xué)習(xí)golang的時(shí)候,一上來就是看語法该抒,看代碼慌洪,在代碼組織和依賴管理這里碰了不少壁,所以重新看了一下官方文檔凑保,并做下備忘冈爹。
注意:Go是跨平臺的,本文基于Ubuntu(Linux)欧引。
安裝/升級
- 下載最新版的安裝包频伤。
- 如果升級,需要先刪除舊版本:
rm /usr/local/go
维咸。 - 把解壓后的目錄安裝(復(fù)制)到
/usr/local/go
剂买。 - 設(shè)置環(huán)境變量在
$HOME/.profile
文件中加上export PATH=$PATH:/usr/local/go/bin
惠爽。 - 查看你安裝的go版本
go version
。 - 更多詳細(xì)請查看官方文檔 瞬哼。
開始寫Go代碼
說明
- 在go中婚肆,一般把所有代碼放在一個(gè)workspace(工作空間下)。
- 這個(gè)workspace下可能會有很多使用不同版本控制工具的代碼倉庫坐慰。
- 每個(gè)倉庫有一個(gè)到多個(gè)package较性。
- 每個(gè)package由一個(gè)到多個(gè)go源碼文件組成。
Workspaces
一個(gè)Workspace下有三個(gè)目錄:
-
src
存放Go源碼结胀,包括自己寫的代碼和import
的第三方代碼赞咙。 -
pkg
存放包對象——編譯后的二進(jìn)制目標(biāo)文件。 -
bin
存放可執(zhí)行文件糟港。
GOPATH
- 環(huán)境變量
GOPATH
就是你的workspace的路徑攀操。默認(rèn)是$HOME/go
。注意:GOPATH
不能與go的安裝路徑相同秸抚。 -
go env GOPATH
:查看當(dāng)前生效的GOPATH的值速和。 - 為了方便,可以將
$GOPTH/bin
路徑加入到$PATH
export PATH=$PATH:$(go env GOPATH)/bin
第一個(gè)程序
假設(shè)你的代碼的base path是github.com/user
剥汤。
- 創(chuàng)建你的代碼base path:
mkdir -p $GOPATH/src/github.com/user
颠放。 - 創(chuàng)建你的第一個(gè)程序的目錄:
mkdir -p $GOPATH/src/github.com/user/hello
。 - 在你的程序目錄下創(chuàng)建一個(gè)源文件
hello.go
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
- 編譯 :
-
go build github.com/user/hello
在當(dāng)前路徑生成可執(zhí)行文件吭敢。 -
go build
在hello目錄下執(zhí)行(下面go install
go test
都類似)碰凶。 -
go install github.com/user/hello
在$GOPATH/bin
目錄下生成可執(zhí)行文件。
-
第一個(gè)包(package)
- 創(chuàng)建代碼路徑:
mkdir -p $GOPATH/src/github.com/user/stringutil
鹿驼。 - 在目錄下創(chuàng)建源文件
reverse.go
欲低。
package stringutil
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)
}
- 執(zhí)行
go build github.com/user/stringutil
不會生成任何東西,但是如果代碼有問題會報(bào)錯(cuò)蠢沿。 - 執(zhí)行
go install github.com/user/stringutil
在生成二進(jìn)制目標(biāo)文件伸头。 - 修改hello.go的代碼,讓它調(diào)用
stringutil.Reverse
package main
import (
"fmt"
"github.com/JinheLin/stringutil"
)
func main() {
fmt.Println(stringutil.Reverse("!oG ,olleH"))
}
- 編譯執(zhí)行
第一個(gè)測試
- go提供了一個(gè)輕量級測試框架舷蟀,主要由
go test
命令和package testing
組成恤磷。 - go規(guī)定測試代碼的文件名為
xxx_test.go
:在stringutils下為reverse.go創(chuàng)建一個(gè)測試代碼文件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)
}
}
}
- 執(zhí)行
go test github.com/user/stringutil
野宜。
總結(jié)
- 學(xué)習(xí)go的安裝和相關(guān)代碼路徑環(huán)境變量扫步。
- 學(xué)習(xí)go代碼的組織結(jié)構(gòu)。
- 學(xué)習(xí)go package的基本管理匈子。