從零開始學習GO語言-搭建Go語言開發環境-快速開發入門小程序
目錄
下載地址
Go官網下載地址:https://golang.org/dl/
Go官方鏡像站(推薦):https://golang.google.cn/dl/
Go中文官方鏡像站(推薦) https://studygolang.com/dl
Go學習群: 760606769
版本的選擇
Windows平台和Mac平台推薦下載可執行文件版,Linux平台下載壓縮文件版。
軟件包的安裝 (case windows )
- Git 客戶端,主要go需要用到第三方包,需要用到Git
- go1.2*.msi 是go的sdk 開發環境
- VsCode 是開發代碼編輯器 推薦使用
以上安裝都是默認進行安裝
下載鏈接:https://pan.baidu.com/s/1CKKCnOzdw8A8WgpGaYSewg
提取碼:y2ie
Linux下安裝
我們在版本選擇頁面選擇並下載好go1.11.5.linux-amd64.tar.gz
文件:
wget https://dl.google.com/go/go1.11.5.linux-amd64.tar.gz
將下載好的文件解壓到/usr/local
目錄下:
mkdir -p /usr/local/go # 創建目錄
tar -C /usr/lcoal/go zxvf go1.11.5.linux-amd64.tar.gz. # 解壓
如果提示沒有權限,加上sudo
以root用戶的身份再運行。執行完就可以在/usr/local/
下看到go目錄了。
配置環境變量: Linux下有兩個文件可以配置環境變量,其中/etc/profile
是對所有用戶生效的;$HOME/.profile
是對當前用戶生效的,根據自己的情況自行選擇一個文件打開,添加如下兩行代碼,保存退出。
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
修改/etc/profile
后要重啟生效,修改$HOME/.profile
后使用source命令加載$HOME/.profile
文件即可生效。 檢查:
~ go version
go version go1.11.5 linux/amd64
配置GOPATH
GOPATH
是一個環境變量,用來表明你寫的go項目的存放路徑(工作目錄)。
GOPATH
路徑最好只設置一個,所有的項目代碼都放到GOPATH
的src
目錄下。
Linux和Mac平台就參照上面配置環境變量的方式將自己的工作目錄添加到環境變量中即可。 Windows平台按下面的步驟將D:\code\go
添加到環境變量:
-
什么是環境變量
-
為什么需要環境變量
安裝完成后
1.打開CMD命令 執行
C:\Users\Thinkpad>go version
go version go1.12.5 windows/amd64
C:\Users\Thinkpad>go env
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\Thinkpad\AppData\Local\go-build
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=D:\project
set GOPROXY=
set GORACE=
set GOROOT=C:\Go
set GOTMPDIR=
set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64
set GCCGO=gccgo
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\Thinkpad\AppData\Local\Temp\go-build378541758=/tmp/go-build -gno-record-gcc-switches
以上輸出說明成功安裝GO開發環境
其他配置
在我們 GOPATH=D:\project 目錄中新建多個目錄: src、pkg、bin
針對上述目錄解釋說明:
src:存放源代碼;
pkg:存放編譯完之后的一些靜態庫(當執行go install時會將一些靜態庫存放在該目錄下)
bin:存放二進制可執行程序文件
GOPATH意義
你知道設置 GOPATH 有什么意義嗎?
你可以把 GOPATH 簡單理解成 Go 語言的工作目錄,它的值是一個目錄的路徑,也可以是多個目錄路徑,每個目錄都代表 Go 語言的一個工作區(workspace)。
事實上,由於 Go 語言項目在其生命周期內的所有操作(編碼、依賴管理、構建、測試、安裝等)基本上都是圍繞着 GOPATH 和工作區進行的。
Go項目結構
在進行Go語言開發的時候,我們的代碼總是會保存在$GOPATH/src
目錄下。在工程經過go build
、go install
或go get
等指令后,會將下載的第三方包源代碼文件放在$GOPATH/src
目錄下, 產生的二進制可執行文件放在 $GOPATH/bin
目錄下,生成的中間緩存文件會被保存在 $GOPATH/pkg
下。
如果我們使用版本管理工具(Version Control System,VCS。常用如Git)來管理我們的項目代碼時,我們只需要添加$GOPATH/src
目錄的源代碼即可。bin
和 pkg
目錄的內容無需版本控制。
適合個人開發者
我們知道源代碼都是存放在GOPATH
的src
目錄下,那我們可以按照下圖來組織我們的代碼。
適合企業開發者
Golang語言的特點
簡介
Go 語言保證了既能到達 靜態編譯語言的安全和性能,又達到了 動態語言開發維護的高效率,使用一個表達式來形容 Go 語言:Go = C + Python , 說明 Go 語言既有 C 靜態語言程序的運行速度,又能達到 Python 動態語言的快速開發。
-
從 C 語言中繼承了很多理念,包括表達式語法,控制結構,基礎數據類型,調用參數傳值, 指針等
等,也保留了和 C 語言一樣的編譯執行方式及弱化的指針舉一個案例(體驗):
//go 語言的指針的使用特點(體驗) func testPtr(num *int) { *num = 20 }
-
引入包的概念,用於組織程序結構,Go 語言的一個文件都要歸屬於一個包,而不能單獨存在。
-
垃圾回收機制,內存自動回收,不需開發人員管理
-
天然並發 ( 重要特點)
- 從語言層面支持並發,實現簡單
- goroutine,輕量級線程,可實現大並發處理,高效利用多核。
- 基於 CPS 並發模型(Communicating Sequential Processes )實現
- 吸收了管道通信機制,形成 Go 語言特有的管道 channel 通過管道 channel , 可以實現不同的 goroute
之間的相互通信。
-
函數可以返回多個值。舉例:
//寫一個函數,實現同時返回 和,差 //go 函數支持返回多個值 func getSumAndSub(n1 int, n2 int) (int, int ) { sum := n1 + n2 //go 語句后面不要帶分號. sub := n1 - n2 return sum , sub }
-
新的創新:比如切片 slice、延時執行 defer
Go語言快速開發入門第一個Go程序
1.需求
要求開發一個hello.go程序,可以輸出hello world
2.開發的步驟
-
開發這個程序/項目時,go的目錄結構怎么樣處理
package main // 聲明 main 包,表明當前是一個可執行程序 import “fmt” // 導入內置 fmt 包 func main(){ // main函數,是程序執行的入口 fmt.Println(“Hello World!”) // 在終端打印 Hello World! }
對上圖說明
(1) go 文件的后綴是 .go
(2) package main
表示該 hello.go 文件所在的包是 main, 在 go 中,每個文件都必須歸屬於一個包。
(3) import “fmt”
表示:引入一個包,包名 fmt, 引入該包后,就可以使用 fmt 包的函數,比如:fmt.Println
(4) func main() {
}
func 是一個關鍵字,表示一個函數。
main 是函數名,是一個主函數,即我們程序的入口。
(5) fmt.Println(“hello”)
表示調用 fmt 包的函數 Println 輸出 “hello,world”
3 通過 go build 命令對該 go 文件進行編譯,生成 .exe 文件.
4 運行 hello.exe 文件即可
5 注意:通過 go run 命令 可以直接運行 hello.go 程序 [類似執行一個腳本文件的形式]
go build
go build
表示將源代碼編譯成可執行文件。
在hello目錄下執行:
go build
或者在其他目錄執行以下命令:
go build hello
go編譯器會去 GOPATH
的src目錄下查找你要編譯的hello
項目
編譯得到的可執行文件會保存在執行編譯命令的當前目錄下,如果是windows平台會在當前目錄下找到hello.exe
可執行文件。
可在終端直接執行該hello.exe
文件:
D:\project\src\gocode.com\day01\helloworld\helloworld.exe
Hello World!
我們還可以使用-o
參數來指定編譯后可執行文件的名字。
go build -o heiheihei.exe
go install
go install
表示安裝的意思,它先編譯源代碼得到可執行文件,然后將可執行文件移動到GOPATH
的bin目錄下。因為我們的環境變量中配置了GOPATH
下的bin目錄,所以我們就可以在任意地方直接執行可執行文件了。
跨平台編譯
默認我們go build
的可執行文件都是當前操作系統可執行的文件,如果我想在windows下編譯一個linux下可執行文件,那需要怎么做呢?
只需要指定目標操作系統的平台和處理器架構即可:
SET CGO_ENABLED=0 // 禁用CGO
SET GOOS=linux // 目標平台是linux
SET GOARCH=amd64 // 目標處理器架構是amd64
然后再執行go build
命令,得到的就是能夠在Linux平台運行的可執行文件了。
Mac 下編譯 Linux 和 Windows平台 64位 可執行程序:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
Linux 下編譯 Mac 和 Windows 平台64位可執行程序:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
Windows下編譯Mac平台64位可執行程序:
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build
Golang 執行流程分析
如果是對源碼編譯后,再執行,Go 的執行流程如下圖
如果我們是對源碼直接 執行 go run 源碼,Go 的執行流程如下圖
兩種執行流程的方式區別
- 如果我們先編譯生成了可執行文件,那么我們可以將該可執行文件拷貝到沒有 go 開發環境的機
器上,仍然可以運行 - 如果我們是直接 go run go 源代碼,那么如果要在另外一個機器上這么運行,也需要 go 開發
環境,否則無法執行。 - 在編譯時,編譯器會將程序運行依賴的庫文件包含在可執行文件中,所以,可執行文件變大了
很多
Go 程序開發的注意事項
- Go 源文件以 “go” 為擴展名。
- Go 應用程序的執行入口是 main()函數。 這個是和其它編程語言(比如 java/c)
- Go 語言嚴格區分大小寫。
- Go 方法由一條條語句構成, 每個語句后不需要分號(Go 語言會在每行后自動加分號),這也體現出 Golang 的簡潔性。
- Go 編譯器是一行行進行編譯的,因此我們一行就寫一條語句,不能把多條語句寫在同一個,否
則報錯
-
go 語言 定義的變量或者 import 的包如果沒有使用到,代碼不能編譯通過。
Go 語言的轉義字符(escape char)
說明:常用的轉義字符有如下:
1) \t : 表示一個制表符,通常使用它可以排版。
2) \n :換行符
3) \ :一個
4) " :一個”
5) \r :一個回車 fmt.Println(“天龍八部雪山飛狐\r 張飛”);
練習題
要求:請使用一句輸出語句,達到輸入圖形效果
package main
import "fmt" //fmt 包中提供格式化,輸出,輸入的函數.
func main() {
//要求:要求:請使用一句輸出語句,達到輸入如下圖形的效果
fmt.Println("姓名\t 年齡\t 籍貫\t 地址\njohn\t20\t 河北\t 北京")
}
現在,開啟你的Go語言學習之旅吧。人生苦短,let’s Go.