寫給自己的Go學(xué)習手冊(0)

前言

本人是.Net/C#開發(fā)小白杜窄,在大佬們的建議下,開始學(xué)習Go語言算途,特此記錄下自己的學(xué)習過程塞耕。
由于本文時自己參考書籍以及網(wǎng)絡(luò)資料寫的,如果有錯誤嘴瓤,請大佬指出扫外,我感謝不盡

Go的Hello World

作為最常用最喜歡的入門第一段程序就是輸出Hello Wrold啦莉钙,這里直接貼代碼給上。

package main

import "fmt"

func main() {
    fmt.Println("Hello World")
}

將上述代碼內(nèi)容復(fù)制到go后綴的文件中筛谚,如main.go磁玉,將終端路徑定位到文件上級,輸入指令
go run main.go
就可以看到萬眾期待的Hello World啦

關(guān)于Go的安裝和配置

Golang的安裝十分簡單驾讲,可以點擊此處鏈接到達下載頁面蚊伞。此處建議下載Go1.13以上版本進行學(xué)習和開發(fā)。本文使用的Go版本是基于1.17進行編寫的吮铭。
安裝完畢之后时迫,開發(fā)者要及時將Go的bin目錄添加到環(huán)境變量的path中。

Go的環(huán)境變量設(shè)置

使用Go指令go env谓晌,既可以查看當前Go的環(huán)境變量設(shè)置掠拳。
go env
這里給出比較推薦的Go全局環(huán)境變量設(shè)置

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

第一行是開啟自Go1.11版本開始,并且至今也比較流行的Go module 包管理工具纸肉。
第二行是切換到七牛云Go下載代理地址溺欧,可以加快國內(nèi)環(huán)境的包獲取速度。

Go常用指令及其一般功能介紹

1.go help

在終端輸入該指令可以獲得所有g(shù)o指令的介紹和使用說明柏肪。

2.go env

該指令可以獲得當前目錄環(huán)境下的go環(huán)境變量數(shù)據(jù)姐刁,也可以通過該指令來更改全局或者當前局部的環(huán)境變量。

3.go mod init XXX

對當前環(huán)境的下創(chuàng)建model為XXX的go.mod文件预吆,即使用gomod包管理工具龙填,一般是一個項目的起點。

4. go mod tidy

主動添加需要用到但go.mod中查不到的模塊拐叉。

5. go run xxx.go

編譯并執(zhí)行xxx.go的main方法岩遗。

6. go build xxx.go(該文件下有main方法)

一般用于編輯和打包生產(chǎn)可執(zhí)行文件,會根據(jù)設(shè)置的環(huán)境變量的OS屬性生成不同系統(tǒng)適用的可執(zhí)行文件凤瘦。

7. go get XXXXX

用于獲取XXX地址的包宿礁。

8. go version

用于查看當前go版本

Go的文件格式說明

package main

import "fmt"

const (
    PI = 3.14
)

var (
    name = "icesfeaters"
)

func init() {
    fmt.Println("init")
}

func main() {
    fmt.Println("Hello World")
}

package 包

包的特性如下:

  • 一個目錄下的同級文件歸屬一個包。
  • 包名可以與其目錄不同名蔬芥。
  • 包名為 main 的包為應(yīng)用程序的入口包梆靖,編譯源碼沒有 main 包時,將無法編譯輸出可執(zhí)行的文件笔诵。只有main包下的main函數(shù)才是程序的入口返吻。

import 導(dǎo)入包

當前程序需要使用到其他包的方法時,需要在import中聲明,并且可以在import中自定義指定方法名來使用乎婿,如下方程序所示测僵。該處理方式主要用于解決1.壓縮包名;2.解決不同包直接的命名沖突問題。

import (
    fmtkk "fmt"
)

func main()  {
    fmtkk.Println("hello world")
}

匿名包

存在部分包捍靠,需要該包的初始化沐旨,但實際程序編寫并不會使用的情況,比如:數(shù)據(jù)庫驅(qū)動方法包榨婆。則需要使用匿名包寫法來聲明磁携,寫法如下。

import (
    _ "github.com/jinzhu/gorm/dialects/mysql"
)
//此處聲明的是mysql驅(qū)動包

const 全局常量聲明

先說明常量的概念:常量:只能讀良风,不能修改谊迄,聲明時必須確定值,且只能是布爾型拖吼、數(shù)字型(整數(shù)型鳞上、浮點型和復(fù)數(shù))和字符串型。
常量聲明的完整寫法如下:const thisNum int = 9吊档。
其中[type] (int)字段篙议,Go可以根據(jù)后面的值來判斷并自動識別聲明,所以可以省略怠硼。
注意點:常量聲明中鬼贱,只能使用=,不能使用:=香璃。

var 全局變量聲明

全局變量聲明必須攜帶關(guān)鍵字var这难,并且只能使用=,不能使用:=葡秒。
全局變量的聲明的完整寫法如下:var thisNum int = 10
與常量聲明不同之處在于:

  • 全局變量聲明可以不給予初始值姻乓,但相對的必須聲明參數(shù)類型,如var thisNum int
  • 變量的類型不僅限于基礎(chǔ)類型眯牧,包括func(),interface{},struct{}等蹋岩。

init 初始化方法

init()函數(shù)會在每個包完成初始化后自動執(zhí)行,并且執(zhí)行優(yōu)先級比main函數(shù)高学少。
init 函數(shù)通常被用來:

  • 對變量進行初始化
  • 檢查/修復(fù)程序的狀態(tài)
  • 注冊
  • 運行一次計算

初始化順序規(guī)則: (1)引入的包 (2) 當前包中的變量常量 (3) 當前包的init (4)main函數(shù)

go初始化順序示意圖.jpg

注意init()函數(shù)不能被主動調(diào)用剪个!
當出現(xiàn)多個init()函數(shù)時,安裝聲明的先后順序依次執(zhí)行版确,測試程序如下:

package main

import "fmt"

func init() {
    fmt.Println("init1")
}

func init() {
    fmt.Println("init2")
}

func main() {
    fmt.Println("main")
}

輸出結(jié)果

init1
init2
main

函數(shù)聲明

此處僅列出函數(shù)聲明的完整格式扣囊,具體方法說明后續(xù)內(nèi)容會說明
func funcName(param1 type,param2 type ...)(res1 type,res2 type ...){}

到時候會將跳轉(zhuǎn)地址在此處列出

額外說明

  1. Go如何區(qū)分公有權(quán)限和私有權(quán)限

go中根據(jù)首字母的大小寫來確定可以訪問的權(quán)限。無論是方法名绒疗、常量侵歇、變量名還是結(jié)構(gòu)體的名稱,如果首字母大寫吓蘑,則可以被其他的包訪問盒至;如果首字母小寫,則只能在本包中使用。
可以簡單的理解成枷遂,首字母大寫是公有的,首字母小寫是私有的棋嘲。

  1. 關(guān)于Go的定義未使用問題

在Go中酒唉,禁止出現(xiàn)未被使用的包、未被使用的局部變量沸移,所以在學(xué)習使用Go的時候要額外注意這一點痪伦。

Go的關(guān)鍵字列舉

  • 包相關(guān):import,package
  • 聲明相關(guān):var,const,type,struct,interface,func,chan,map,go
  • 循環(huán)相關(guān):for,range
  • 條件判斷相關(guān):if,else,switch,select,case
  • 中斷或返回:return,goto,fallthrough,break,default,continue
  • 延遲執(zhí)行:defer
  • 預(yù)聲明常量:true,false,iota,nil
  • 預(yù)聲明類型:(整型)int,int8,int16,int32,int64;(無符號整型)uint,uint8,uint16,uint32,uint64,uintptr;(浮點型)float32,float64,complex64,complex128;(其他)bool,byte,rune,string,error
  • 預(yù)聲明函數(shù):make,len,cap,new,append,copy,close,delete,complex,real,imag,panic,recover
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市雹锣,隨后出現(xiàn)的幾起案子网沾,更是在濱河造成了極大的恐慌,老刑警劉巖蕊爵,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辉哥,死亡現(xiàn)場離奇詭異,居然都是意外死亡攒射,警方通過查閱死者的電腦和手機醋旦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來会放,“玉大人饲齐,你說我怎么就攤上這事∵肿睿” “怎么了捂人?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長矢沿。 經(jīng)常有香客問我滥搭,道長,這世上最難降的妖魔是什么咨察? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任论熙,我火速辦了婚禮,結(jié)果婚禮上摄狱,老公的妹妹穿的比我還像新娘脓诡。我一直安慰自己,他們只是感情好媒役,可當我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布祝谚。 她就那樣靜靜地躺著,像睡著了一般酣衷。 火紅的嫁衣襯著肌膚如雪交惯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天,我揣著相機與錄音席爽,去河邊找鬼意荤。 笑死,一個胖子當著我的面吹牛只锻,可吹牛的內(nèi)容都是我干的玖像。 我是一名探鬼主播,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼齐饮,長吁一口氣:“原來是場噩夢啊……” “哼捐寥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起祖驱,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤握恳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捺僻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乡洼,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年陵像,在試婚紗的時候發(fā)現(xiàn)自己被綠了就珠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡醒颖,死狀恐怖妻怎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情泞歉,我是刑警寧澤逼侦,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站腰耙,受9級特大地震影響榛丢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜挺庞,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一晰赞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧选侨,春花似錦掖鱼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至晨仑,卻和暖如春褐墅,著一層夾襖步出監(jiān)牢的瞬間拆檬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工妥凳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留竟贯,地道東北人。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓逝钥,卻偏偏與公主長得像澄耍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子晌缘,可洞房花燭夜當晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容