
下載:??https://golang.google.cn/dl/??
配置env
PS H:\testGo> $env:GO111MODULR="on"PS H:\testGo> $env:GOPROXY="http://goproxy.cn"
添加環(huán)境變量 :軟件安裝在H:\go目錄下
(資料圖片)
下載git軟件
地址??https://git-scm.com/downloads??
下載好之后將目錄添加到環(huán)境變量里面
goroot:go項(xiàng)目安裝目錄
linux安裝
直接在終端中輸入??go help?
?即可顯示所有的 go 命令以及相應(yīng)命令功能簡介,主要有下面這些:
數(shù)組是相同數(shù)據(jù)類型的一組數(shù)據(jù)的集合,數(shù)組一旦定義長度不能修改,數(shù)組可以通過下標(biāo)或者是索引來訪問元素
數(shù)組的定義
var variable_name [size] variable_typevariable_name 數(shù)組名稱[size] 數(shù)組長度variable_type 數(shù)組保存元素的類型
省略數(shù)組長度
數(shù)組長度可以省略使用 ...代替初始化值得數(shù)量自動(dòng)推斷,例如var a=[...]int{1,2,3}
var a=[...]int{0:1,5:77} 有6個(gè)元素其中索引1-4默認(rèn)為0
var a=[...]bool{0:true,4:true} 有6個(gè)元素其中索引1-3默認(rèn)為false
數(shù)組是固定長度,可以容納相同數(shù)據(jù)類型的元素的集合,當(dāng)長度固定時(shí),使用帶來一些限制,比如申請的長度太大浪費(fèi)內(nèi)存,太小又不夠使用,
切片可以理解為可變長度的數(shù)組,其實(shí)他底層就是使用數(shù)組實(shí)現(xiàn)的增加了自動(dòng)擴(kuò)容功能,切片slice是一個(gè)擁有相同類型原色的可變長度序列
語法:
var identifier []typevar slice1 []type =make([]type,len) 初始化切片長度slice1 := make([]type,len) 指定長度make([]Type,length,capoacity) 指定容量
切片的增加和刪除
增加示例:var s1 =[]int {1,2,3,4,5}s1 =append(s1,6) //增加刪除 s1[3]s1 =append(s1[:2],s1[3:]...)修改s1[3] =100
切片直接賦值時(shí) 指定的是同一個(gè)地址
var s1 =[]int{1,2,3}var s2 = s1 地址傳遞var s3 =make([]int,4)copy(s3,s1) 值傳遞
使用內(nèi)建函數(shù)make也可以使用關(guān)鍵字map map 是一個(gè)無序集合
聲明變量 默認(rèn)map是nilvar map_variable map[key_data_type]value_data_type使用make函數(shù)map_variable = make(map[key_data-type]value-data_type)map_variable 變量名稱map[key_data_type] key的數(shù)據(jù)類型value_data_type 值的數(shù)據(jù)類型
示例var m1 map[string]string{"name":"tom","age":"20"}示例2m2 :=make(map[string]string)m2["name"]="tom"m2["age"]="20"v,ok :=m2["email"]ok標(biāo)識(shí)m2中email 不存在是ok為false 存在時(shí)ok返回ture
函數(shù)再使用之?前必須先定義,可以調(diào)用函數(shù)來完成某個(gè)任務(wù),函數(shù)可以重復(fù)調(diào)用,從而達(dá)到代碼重用
語法
func function_name([parameter list])[return_type]{}
閉包func add() func(int) int { var x int return func(y int) int { x += y return x }}func main(){ var f =add(10) f(10) f(20) f(30)}
遞歸階乘運(yùn)算func jieCheng(a int) int{ if a==1{ return 1 }else{ return a * jiecheng(a-1) }}
延遲處理 在defer歸屬的函數(shù)即將返回時(shí),將延遲處理的語句按照defer 定義的逆序進(jìn)行執(zhí)行,也就是說先被defer的語句最后被執(zhí)行,最后被defer的語句最先被執(zhí)行(先進(jìn)后出)
defer用于注冊延遲調(diào)用調(diào)用知道return前才被執(zhí)行,因此可以用來做資源清理多個(gè)defer語句,按照先進(jìn)后出方式zhixngdefer語句中的變了,在defer聲明是就決定了用途:關(guān)閉文件句柄,鎖資源釋放,數(shù)據(jù)庫連接釋放
init函數(shù)先于main函數(shù)執(zhí)行,實(shí)現(xiàn)包級別的初始化操作
特點(diǎn):
init函數(shù)先于main函數(shù)自動(dòng)執(zhí)行,不能被其他函數(shù)調(diào)用init函數(shù)沒有輸入?yún)?shù) ,沒有返回值每個(gè)包可以有多個(gè)init函數(shù)包的每個(gè)源文件也可以有多個(gè)init函數(shù)同一個(gè)包的init執(zhí)行順序,golang沒有明確定義,編程時(shí)注意程序不要依賴這個(gè)執(zhí)行順序不同包的init函數(shù)按照包導(dǎo)入的依賴關(guān)系決定執(zhí)行順序定義類型 *
var i :=*intvar a :=100i=&a 將a的地址給ivar c := intc =*i 將I的值賦值給c
標(biāo)簽: 數(shù)據(jù)類型 可變長度 先進(jìn)后出