1-1 Go語言特點(diǎn)
特點(diǎn):
1. 靜態(tài)類型,編譯開源語言
2. 腳本化的語法,支持多種編程范式(函數(shù)式,面向?qū)ο螅?
3. 原生,給力的并發(fā)支持并發(fā)編程
1-2 Go語言優(yōu)勢與劣勢
Go語言的優(yōu)勢:
1.腳本化的語法;開發(fā)效率高,容易上手
2.靜態(tài)類型+編譯型,程序運(yùn)行速度有保障;靜態(tài)類型+編譯型語言相對于動態(tài)類型+解釋型語言的效率高
3.原生的支持并發(fā)編程;降低開發(fā)、維護(hù)成本/程序可以更好的執(zhí)行
Go語言的劣勢:
1.語法糖并沒有Python和Ruby多;
2.目前的程序運(yùn)行速度還不及C;比C++、java快
3.第三方函數(shù)庫暫時不像絕對主流的編程語言那樣多;
1-3 Linux下的安裝
win & mac
下載安裝包安裝即可
Linux
1. wget https://go.dev/dl/go1.20.4.linux-arm64.tar.gz
2. tar -zxf go1.20.4.linux-arm64.tar.gz -C /usr/local
1-4 Linux下的環(huán)境變量
vim /etc/profile
#當(dāng)前安裝目錄
export GOROOT=/usr/local/go
#工作區(qū)的集合
export GOPATH=~/golib:~/goproject
#可執(zhí)行文件的目錄
export GOBIN=~/gobin
export PATH=$PATH:$GOROOT/bin:$GOBIN
source /etc/profile
go version
2-1 Go語言-工作區(qū)和GOPATH
工作區(qū)是放置Go源碼文件的目錄;一般情況下,Go源碼文件都需要存放到工作區(qū)中;但是對于命令源碼文件來說,這不是必須的。
每一個工作區(qū)的結(jié)構(gòu)都類似下圖所示:/home/hypermind/golib: src/ pkg/ bin/
src目錄用于存放源碼文件;以代碼包為組織形式
pkg目錄用于存放歸檔文件(名稱以.a為后綴的文件) 所有歸檔文件都會被存放到該目錄下的平臺相關(guān)目錄中,用樣以代碼包為組織形式
平臺相關(guān)目錄:兩個隱含的Go語言環(huán)境變量:GOOS(操作系統(tǒng))和GOARCH(計(jì)算機(jī)架構(gòu))。以$GOOS_$GOPATH為命名方式,如:linux_amd64
<工作區(qū)目錄>/pkg/<平臺相關(guān)目錄>/<一級代碼包>/<二級代碼包>/<末級代碼包>.a
bin目錄:用于存放當(dāng)前工作區(qū)中的Go程序的可執(zhí)行文件
1.當(dāng)環(huán)境變量GOBIN已有效設(shè)置時,該目錄會變的無意義;
2.當(dāng)GOPATH的值中包含多個工作區(qū)的路徑時,必須設(shè)置GOBIN,否則無法成功安裝Go程序的可執(zhí)行文件
2-2 Go語言-源碼文件的分類和含義
Go源碼文件:名稱以.go為后綴,內(nèi)容以Go語言代碼組織的文件 多個Go源碼文件是需要用代碼包組織起來的
源碼文件分為三類:命令源碼文件、庫源碼文件(go語言程序) 測試源碼文件(輔助源碼文件)
命令源碼文件:聲明自己屬于main代碼包、包含無參數(shù)聲明和結(jié)果聲明的main函數(shù);被安裝后,相應(yīng)的可執(zhí)行文件會被存放到GOBIN指向的目錄或<當(dāng)前工作區(qū)目錄>/bin下
命令源碼文件是Go程序的入口,但不建議把程序都寫在一個文件中;同一個代碼包中強(qiáng)烈不建議直接包含多個命令源碼文件。
庫源碼文件:不具備命令源碼文件的那兩個特征的源碼文件, 被安裝后,相應(yīng)的歸檔文件會被存放到<當(dāng)前工作區(qū)目錄>/pkg/<平臺相關(guān)目錄>下
測試源碼文件:不具備命令源碼文件的那兩個特征的源碼文件。名稱以_test.go為后綴。其中至少有一個函數(shù)的名稱以Test或Benchmark為前綴。并且,該函數(shù)接受一個類型為
*testing.T或*testing.B的參數(shù)
func TestFind(t *testing.T){//省略若干條語句}
func BenchmarkFind(b *testing.B){//省略若干條語句}
2-3&4 Go語言-代碼包的相關(guān)知識
代碼包的作用:編譯和歸檔Go程序的最基本單位。代碼劃分、集結(jié)和依賴的有效組織形式,也是權(quán)限控制的輔助手段
代碼包的規(guī)則:一個代碼包實(shí)際上就是一個由導(dǎo)入路徑代表的目錄;導(dǎo)入路徑即<工作區(qū)目錄>/src或<工作區(qū)目錄>/pkg/<平臺相關(guān)目錄>之下的某段子路徑
例如:代碼包hypermind.cn可以對應(yīng)于/home/hypermind/golib/src/hypermind.cn目錄。(其中 /home/hypermind/golib是一個工作區(qū)目錄)
代碼包的聲明:每個源碼文件必須聲明其所屬的代碼包;同一個代碼包中的所有源碼文件聲明的代碼包應(yīng)該是相同的。
代碼包聲明與代碼包導(dǎo)入路徑的區(qū)別:
代碼包聲明:代碼包聲明語句中的包名稱應(yīng)該是該代碼包的導(dǎo)入路徑的最右子路徑,例如:hypermind.cn/pkgtool package pkgtool
代碼包導(dǎo)入語句中使用的包名稱應(yīng)該與其導(dǎo)入路徑一致,例如: flag fmt strings import("flag" "fmt" "strings")
代碼包的導(dǎo)入方法:帶別名的導(dǎo)入:import str "strings" str.HasPrefix("abc","a")
本地化的導(dǎo)入:import ."strings" HasPrefix("abc","a")
僅僅初始化:import _"strings" 僅執(zhí)行代碼包中的初始化函數(shù)
代碼包初始化函數(shù):無參數(shù)聲明和結(jié)果聲明的init函數(shù)
init函數(shù)可以被聲明在任何文件中,且可以有多個
init函數(shù)的執(zhí)行時機(jī)——單一代碼包內(nèi)
1對所有全局變量進(jìn)行求值 2執(zhí)行所有init函數(shù)
如果在不同對代碼包內(nèi)
1執(zhí)行被導(dǎo)入對代碼包中對init函數(shù) 2執(zhí)行導(dǎo)入它對那個代碼包對init函數(shù)
導(dǎo)入順序 A——B——C 執(zhí)行順序 C——B——A
init函數(shù)肯定在main函數(shù)之前先執(zhí)行,每一個init函數(shù)都只會執(zhí)行一次
3-1 go run 命令簡介
go run命令:
用于運(yùn)行命令源碼文件
只能接受一個命令源碼文件以及若干個庫源碼文件作為文件參數(shù)
goc2p項(xiàng)目地址:https://github.com/hyper-carrot/goc2p
用go編寫了ds和pds,用以打印目錄結(jié)構(gòu)
3-4 go run 常用標(biāo)記的使用
-v:列出被編譯的代碼包的名稱
-work: 顯示編譯時創(chuàng)建的臨時工作目錄的路徑,并且不刪除它
-x: 打印編譯過程中所需運(yùn)行的命令
-n;打印編譯過程中所需的命令,但并不執(zhí)行
-x:打印編譯過程中所需的命令,并執(zhí)行他們。
3-6 go build 命令簡介
go build 簡介(1)
用于編譯源碼文件或代碼包
編譯非命令源碼文件不會產(chǎn)生任何結(jié)果文件
編譯命令源碼文件會在該命令的執(zhí)行目錄中生成一個可執(zhí)行文件
Go build 簡介(2)
執(zhí)行該命令且不追加任何參數(shù)時,它會試圖把當(dāng)前目錄作為代碼包并編譯
執(zhí)行該命令且以代碼包的導(dǎo)入路徑作為參數(shù)時,該代碼包及其依賴會被編譯
執(zhí)行該命令且以若干源碼文件作為參數(shù)時,只有這些文件會被編譯
3-8 go install 命令簡介
go Install 簡介(1)
用于編譯并安裝代碼包或源碼文件
安裝代碼包會在當(dāng)前工作區(qū)的 pkg/<平臺相關(guān)目錄> 下生成歸檔文件
安裝命令源碼文件會在當(dāng)前工作區(qū)的 bin 目錄或 $GOBIN 目錄下生成可執(zhí)行文件
go install 簡介(2)
執(zhí)行該命令且不追加任何參數(shù)時,它會試圖把當(dāng)前目錄作為代碼包并安裝
執(zhí)行該命令且以代碼包的導(dǎo)入路徑作為參數(shù)時,該代碼包及其依賴會被安裝
執(zhí)行該命令且以命令源碼文件及相關(guān)庫源碼文件作為參數(shù)時,只有這些文件會被編譯并安裝
3-10 go get 命令簡介
go get
用于從遠(yuǎn)程代碼倉庫(如GitHub)上下載并安裝代碼包
受支持的代碼版本控制系統(tǒng)有:Git Mercurial(hg) SVN Bazaar
指定的代碼包會被下載到$GOPATH中包含的第一個工作區(qū)的src目錄中
3-12 go get 常用標(biāo)記的使用
go get:
-d : 只執(zhí)行下載動作, 不執(zhí)行安裝動作
-fix :在下載代碼包后先執(zhí)行修正動作,而后再進(jìn)行編譯和安裝
-u : 利用網(wǎng)絡(luò)來更新已有的代碼包及其依賴包
go命令教程:https://github.com/hyper-carrot/go_command_tutorial文章來源:http://www.zghlxwxcb.cn/news/detail-493622.html
4-1 程序?qū)嶓w與關(guān)鍵字
文章來源地址http://www.zghlxwxcb.cn/news/detail-493622.html
到了這里,關(guān)于[Go]-Go語言第一課的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!