GO 學(xué)習(xí)

2022-12-12 19:17:18 來源:51CTO博客

1 安裝

下載:??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安裝

2 GO的常用變量

直接在終端中輸入??go help??即可顯示所有的 go 命令以及相應(yīng)命令功能簡介,主要有下面這些:

build: 編譯包和依賴clean: 移除對象文件doc: 顯示包或者符號(hào)的文檔env: 打印go的環(huán)境信息bug: 啟動(dòng)錯(cuò)誤報(bào)告fix: 運(yùn)行g(shù)o tool fixfmt: 運(yùn)行g(shù)ofmt進(jìn)行格式化generate:從processing source 生成go文件install:編輯并安裝包和依賴list:列出包run:編輯并運(yùn)行g(shù)o程序test:運(yùn)行測試tool:運(yùn)行g(shù)o提供的工具version:查看go版本

3 golang數(shù)組

數(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

4切片

數(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)  值傳遞

5map

使用內(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

6 函數(shù)

go語言有三種函數(shù):普通函數(shù),匿名函數(shù),方法(定義在struct結(jié)構(gòu)體上的函數(shù))不允許函數(shù)重載,也不允許函數(shù)同名不能嵌套函數(shù),單可以嵌套匿名函數(shù)函數(shù)是一個(gè)值,可以將函數(shù)賦值給變量,這個(gè)變量也成為了函數(shù)函數(shù)可以作為參數(shù)傳遞給另一個(gè)函數(shù)函數(shù)的返回值可以是一個(gè)函數(shù)函數(shù)調(diào)用的時(shí)候,如果有參數(shù)傳遞給函數(shù),則先拷貝參數(shù)的副本,再講副本傳遞給函數(shù)函數(shù)參數(shù)可以沒有名稱

函數(shù)再使用之?前必須先定義,可以調(diào)用函數(shù)來完成某個(gè)任務(wù),函數(shù)可以重復(fù)調(diào)用,從而達(dá)到代碼重用

語法

func function_name([parameter list])[return_type]{}

7 閉包和遞歸

閉包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)    }}

8 defer 語句 和 init 函數(shù)

延遲處理 在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í)行順序

9 指針

定義類型 *

var i :=*intvar a :=100i=&a 將a的地址給ivar c := intc =*i 將I的值賦值給c

標(biāo)簽: 數(shù)據(jù)類型 可變長度 先進(jìn)后出

上一篇:零基礎(chǔ)開啟元宇宙|如何快速創(chuàng)建虛擬形象
下一篇:世界即時(shí)看!#yyds干貨盤點(diǎn)# LeetCode程序員面試金典:鏈表相交