-
Go 語言的文件操作
本文主要介紹 Go 語言中對(duì)文件系統(tǒng)的操作,Go 語言內(nèi)置庫中提供了豐富的文件操作函數(shù),所以本文主要介紹使用Go 語言中的內(nèi)置包——“os” 來實(shí)現(xiàn)文件操作。 1. 文件創(chuàng)建/打開 若你想創(chuàng)建/打開一個(gè)文件,則可以使用 代碼塊 1? func OpenFile(name string, flag int, perm uint32) (file *File, err Error) 參數(shù)解釋: name:就是文件名,若文件不在執(zhí)行程序目錄下,則可以使用文件的相對(duì)路徑或者絕對(duì)路徑。 fl…
-
Go 語言 go mod 包依賴管理工具
前文了解了 Go 語言中的包來復(fù)用代碼,一直以來 Go 語言的包管理都是飽受開發(fā)者詬病的一個(gè)軟肋,直到官方推出了 go mod。這個(gè)強(qiáng)大的包管理工具使得我們徹底告別了 Go 語言繁瑣的包管理。本文就來介紹以下如何使用 go mod 來進(jìn)行包管理。 Tips:只有在Go11.1之后的版本有這個(gè)工具,在Go語言13.0以后該工具趨于完善。本文的Go版本為13.5,建議使用最新版本的Go語言環(huán)境。 1. 指令介紹 在控制臺(tái)中輸入go mod指令,會(huì)出來這個(gè)工具的幫助命令。 指令解析如下表…
-
Go 語言中的包
在 Go 語言的錯(cuò)誤處理中我們提到了 errors 包,當(dāng)時(shí)沒有詳細(xì)的介紹。本文就來詳細(xì)的介紹一下?Go 語言中包相關(guān)的概念。 和大部分語言一致,Go 語言也是支持調(diào)用其它文件中的 Go 代碼的。Go 語言是現(xiàn)這一功能則是通過包來實(shí)現(xiàn)的。而實(shí)現(xiàn)包的功能則是通過關(guān)鍵字?package?來實(shí)現(xiàn)的,使用?package?來聲明代碼所在的包。 1. 基本概念 Go 語言中一般使用文件所在的文件名來命名自己的包名,這樣層次清晰便于管理。其中包名定義的注意事項(xiàng)如下: 包名一般都是全小寫; 包名…
-
Go 語言的并發(fā)
Go 語言中的多線程操作是其語言的一大特色,它具有其它語言無法比擬的,可以近乎無限開啟的線程。在 Go 語言中被稱之為?goroutine?,它是線程的輕量級(jí)實(shí)現(xiàn)。Go 語言的并發(fā)廣泛的應(yīng)用在服務(wù)器性能調(diào)優(yōu)的場景中,這也是越來越多的游戲服務(wù)器開發(fā)都在往 Go 語言傾斜的原因之一。 1.Go 語言的 goroutine 在 Go 語言中使用?go?關(guān)鍵字來創(chuàng)建 goroutine ,形如go 函數(shù)名()的形式去創(chuàng)建。每一個(gè) goroutine 必須是一個(gè)函數(shù),這個(gè)函數(shù)也可以是匿名函數(shù)…
-
Go 語言中的錯(cuò)誤和異常處理
在 Go 語言中沒有與 Java 或者 .NET 類似的異常處理機(jī)制。Go 語言的開發(fā)者認(rèn)為類似的異常處理已經(jīng)被過多的使用了,這樣的異常機(jī)制過度依賴上層代碼對(duì)異常的處理,如果上層代碼對(duì)異常的處理不到位會(huì)使程序出一些不易排查的BUG。所以為了讓開發(fā)者能夠重視并正確的處理每一個(gè)可能會(huì)出現(xiàn)異常的函數(shù),Go語言采用返回值的形式來返回錯(cuò)誤。這一機(jī)制,既可以讓開發(fā)者真正理解錯(cuò)誤處理的含義,也可以大大降低程序的復(fù)雜度。 1.error 接口 error 是系統(tǒng)自帶的一個(gè)接口類型的自定義類型。 代…
-
Go 語言函數(shù)式編程
本文主要介紹 Go 語言的另一大編程特性——函數(shù)式編程。函數(shù)式編程的基礎(chǔ)特點(diǎn)為: 函數(shù)是一等公民,即函數(shù)可以做為變量。 純函數(shù),即函數(shù)內(nèi)的操作不可影響到函數(shù)外。 Go 語言的函數(shù)式編程無需遵循第二點(diǎn),這一特性為 Go 語言的函數(shù)式編程帶來了更大的靈活性。 1. 編程示例 接下來我們來分別展示用函數(shù)式編程和普通編程方式來實(shí)現(xiàn)一個(gè)累加器,即輸出 1+2+3+…+100 的值。 普通方式實(shí)現(xiàn): 代碼塊 1? func main() { 2? ? ? ? ? a := 0 3? ? ? ?…
-
Go 語言中的 nil
nil?是 Go 語言中內(nèi)置的一個(gè)標(biāo)識(shí)符,有人會(huì)把它當(dāng)作其它語言中的NULL,這個(gè)是不準(zhǔn)確的。本文就來介紹一下 Go 語言中的?nil?的特點(diǎn)。 1. nil 是特殊的零值 在 Go 語言中,任何一個(gè)變量在聲明之后會(huì)自動(dòng)被賦予一個(gè)零值。數(shù)值類型的變量零值為0,字符串為"",而指針、切片、map、通道、函數(shù)和接口的零值就是nil。 代碼示例 代碼塊 1? package main 2 3? import ( 4? ? ? ? ? "fmt" 5? ) 6 7? func main()…
-
Go 語言類型的內(nèi)嵌
在 Go 語言中的類型是可以直接內(nèi)嵌到結(jié)構(gòu)體中的,可以看作是一個(gè)沒有屬性名的屬性。同時(shí)接口中也可以內(nèi)嵌接口,并且只能內(nèi)嵌接口。本文就來講解以下 Go 語言如何使用內(nèi)嵌類型。 1. 結(jié)構(gòu)體內(nèi)嵌類型 結(jié)構(gòu)體中內(nèi)嵌類型在開發(fā)中用的并不多,這只是一個(gè)延伸特性。意味著結(jié)構(gòu)體在定義屬性字段的時(shí)候可以只寫類型,不寫屬性名,但是一個(gè)類型只能寫一個(gè),不然結(jié)構(gòu)體會(huì)無法識(shí)別你調(diào)用的時(shí)候使用的是哪個(gè)字段,這種只寫類型不寫屬性名的屬性被稱為匿名字段。 代碼示例: 代碼塊 1? package main 2 …
-
Go 語言中的接口
在所有編程語言中,接口都是一些方法的集合,通常都是"類"們都需要實(shí)現(xiàn)的一些公共方法。使這些"類"在使用過程中多了一層抽象。在使用接口時(shí)無需在意這些方法是如何實(shí)現(xiàn)的,只需在意這個(gè)接口中的方法本身。Go 語言提倡面向接口編程,一來增強(qiáng)代碼的可讀性,二來可以使代碼的模塊之間的關(guān)系變得更加清晰、邊界更加明顯。本文就來介紹一下 Go 語言中的接口。 1. 接口定義 在 Go 語言中,接口也是一個(gè)數(shù)據(jù)類型,該類型使用結(jié)構(gòu)?interface{...}?來定義。 代碼示例: 代碼塊 1? var…
-
Go 語言中的結(jié)構(gòu)體和“面向?qū)ο蟆?
本文主要來講解一下 Go 語言的結(jié)構(gòu)體數(shù)據(jù)類型,以及 Go 語言中的"面向?qū)ο?,為什么要加雙引號(hào)呢?因?yàn)?Go 語言中沒有明確的面向?qū)ο蟮母拍?,?dāng)然也沒有明確的面向過程的概念。面向哪一方面編程完全取決于你如何使用,如果你想要面向?qū)ο缶幊?,Go 語言中提供了相對(duì)應(yīng)的解決方案來模擬面向?qū)ο蟆? 1. 結(jié)構(gòu)體類型 想要模擬面向?qū)ο缶褪紫纫私庖幌?Go 語言中的結(jié)構(gòu)體類型。當(dāng)你需要兩個(gè)以上的基本數(shù)據(jù)類型或自定義類型來聲明定義函數(shù)的時(shí)候,你就可以使用結(jié)構(gòu)體。結(jié)構(gòu)體變量使用struct{..…