1.什麼是go
go語言是一門併發支持、垃圾回收的編譯型系統編程語言旨在創造一門具有在靜態編譯語言的高性能和動態語言的高效開發之間擁有良好平衡點的一門編程語言。
2.go的主要特點
- 類型安全和內存安全
- 以非常直觀和極低代價的方案實現高併發
- 高效的垃圾回收機制
- 快速編譯(同時解決C語言中頭文件太多的問題)
- 爲多核計算機提供性能提升的方案
- UTF-8編碼支持
3.Ubuntu下go環境搭建
3.1 下載並解壓符合操作系統的二進制源碼包
在這裏選擇合適的包並下載:https://golang.org/dl/
wget https://dl.google.com/go/go1.14.3.linux-amd64.tar.gz
sudo tar -C /usr/local/ -zxvf go1.14.3.linux-amd64.tar.gz
3.2 設置環境變量
sudo vim /etc/profile
添加以下文件:
export GOROOT="/usr/local/go"
export PATH=$GOROOT/bin:$PATH
export GOPATH=/home/ljr/go
- GOROOT:表示go在電腦上的安裝位置,如我的go安裝位置在
/usr/local/go
,我在配置文件中對應配置GOROOT=/usr/local/go
。 - PATH:保證配置可以在任何地方調用需要在PATH環境變量上添加go的路徑。
- GOPATH:一個保存工作目錄的環境變量,可以設置多個工作目錄。
設置完成後,重啓Ubuntu生效,或使用此命令立即生效:
source /etc/profile
此時可輸入以下命令來檢查go的環境變量:
go env
env
在終端輸入go可以查看幫助:
4.go 語言 HelloWorld
按照go開發規範,GOPATH目錄下的每個工作一般分爲三個子目錄:src,pkg,bin。
- src——裏面每一個子目錄,就是一個包,包內是Go的源碼文件;
- pkg——編譯後生成的,包的目標文件;
- bin——生成的可執行文件。
4.1編寫第一個程序
在src目錄下創建一個文件夾叫hello,在該目錄下創建一個文件叫hello.go,用vim輸入以下內容:
package main
import "fmt"
func main() {
println("Hello", "world")
}
程序解讀:
4.1.1 package
- 在同一個包下面的文件屬於同一個工程文件,不用import包,可以直接使用;
- 在同一個包下面的所有文件的package名,都是一樣的;
- 在同一個包下面的文件package名都建議設爲是該目錄名,但也可以不是。
4.1.2 import
import “fmt” 告訴 go 編譯器這個程序需要使用 fmt 包的函數,fmt 包實現了格式化 IO(輸入/輸出)的函數,可以是相對路徑也可以是絕對路徑,推薦使用絕對路徑(起始於工程根目錄)。
- 點操作:我們有時候會看到如下的方式導入包
import(
. "fmt"
)
這個點操作的含義就是這個包導入之後在你調用這個包的函數時,你可以省略前綴的包名,也就是前面你調用的fmt.Println("hello world")
可以省略的寫成Println("hello world")
。
- 別名操作:別名操作顧名思義我們可以把包命名成另一個我們用起來容易記憶的名字
import(
f "fmt"
)
別名操作的話調用包函數時前綴變成了我們的前綴,即f.Println("hello world")
。
- _操作:請看下面這個import
import (
"database/sql"
_ "xxx"
)
_操作其實是引入該包,而不直接使用包裏面的函數,而是調用了該包裏面的init函數
4.1.3 main
main()是程序運行的入口。
4.1.4 Go中的保留字
這些保留字不能用作常量或變量或任何其他標識符名稱。
4.2 執行go程序
方式一:使用go run命令
可以看到go編譯中檢查到程序中沒有用到“fmt”包,驗證了go語言快速編譯的特點,我們改下程序,去掉import “fmt”,然後運行:
可以看到得出了預期的結果。
方式二:使用go build命令
打開終端:在任意文件路徑下,運行:
go install hello
或進入項目(應用包)的路徑,然後運行:
go install
在編譯生成go程序時,go實際上會去兩個地方找程序包:GOROOT下的src文件夾下和GOPATH下的src文件夾下。在程序包裏,自動找main包的main函數作爲程序入口,然後進行編譯。在/home/ljr/go/bin/
下(如果之前沒有bin目錄則會自動創建),會發現出現了一個hello的可執行文件,運行結果如下: