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