-
Go 語言中的 Map
本文介紹一種特殊的數據結構。它是一種元素對的無序集合,每一個索引(key)對應一個值(value),這種數據結構在 Go 語言中被稱之為?map。map?是一種能夠通過索引(key)迅速找到值(value)的數據結構,所以也被稱為字典。在 Go 語言中因為線程安全問題,一共實現了兩種類型的 map,接下來我們每種都了解一下。 Tips:線程的知識會在Go語言的多線程中講解。 1. 無鎖的map 這種類型的 map 是線程不安全的 map,多個線程同時訪問這個類型的 map 的同一個…
-
Go 語言中的切片
本位主要介紹一下 Go 語言中可變長度的"數組"——切片(slice)。數組有數組的用處,但是其不可變長度的特性,注定了在大多場景下不是很受歡迎。在大多數場景下我們都會選擇更加靈活的切片。 1. 切片的創建 切片的聲明方式和數組類似,寫法上看就是聲明一個沒有長度的數組:var 切片名 []切片類型。其中切片類型可以是切片本身,也就是切片的切片,就構成了多維的切片。 切片在使用之前必須要初始化,它沒有零值。聲明后它的值是?nil,這是因為它的底層實現是一個指向數組的指針,在你給它存入…
-
Go 語言中的數組
數組是一個可以存放相同數據類型數據的定長序列。由于數組是定長的,在使用場景并不豐富,所以在 Go 語言中通常使用的是切片(Slice)。想要使用切片,就先要了解數組,所以在本文先介紹 Go 語言中數組的使用。 1. 數組的聲明 數組的聲明形式形如var 數組名 [數組長度]數組類型,其中數組類型可以是數組本身,也就是數組類型的數組,這樣就構成了多維數組。和變量的聲明相同,數組在聲明時會初始化變量類型的零值。 代碼示例 代碼塊 1? package main 2 3? import …
-
Go 語言的指針
本文主要介紹 Go 語言中的指針。Go 語言中和 C/C++ 一樣,直接提供了指針類型,但是不同的是 Go 語言的指針并沒有那么高深莫測,因為它是無法進行位移和運算的,它只是一個存儲了其它變量地址的變量而已。它在 Go 語言中最大的作用就是在值傳遞的過程中減少內存消耗,畢竟一個地址的存儲開銷是十分少的。 1.指針的定義和使用 在 Go 語言中指針類型的聲明和 C/C++ 類似,都是采用*符號來區分正常類型變量和指針變量。 代碼示例: 代碼塊 1? package main 2 3?…
-
Go 語言中的閉包
本文主要介紹 Go 語言中的閉包。簡單的說 Go 語言的閉包就是一個引用了外部自由變量的匿名函數,被引用的自由變量和該匿名函數共同存在,不會因為離開了外部環境就被釋放或者刪除,還可以在這個匿名函數中繼續使用。 1. Go 語言的匿名函數 在上文中我們了解到了一個新的詞匯——匿名函數,我們先來學習一下Go語言中的匿名函數,再來了解在 Go 語言中如何使用閉包。匿名函數,顧名思義,就是隱藏函數名的函數。 代碼示例: 代碼塊 1? package main 2 3? import ( 4…
-
Go 語言函數中的defer
在 Go 語言中的?defer?關鍵字就是 Go 語言中延遲語句的標志。Go 語言會在函數即將返回時按逆序執行?defer?后的語句。也就是說先被?defer?的語句后執行,最先執行最后被?defer?的語句。defer?和有些語言中的 finally 語句塊的用法類似,一般都用于釋放一些資源,最常用的地方就是進程鎖的釋放。 Tips:關于 defer 的進程鎖的釋放在 Go 語言的多線程中會有介紹。 1. defer 的逆序執行 defer?會在函數即將結束的時候執行,而且是按照…
-
Go 語言中的函數
本文來介紹 Go 語言中的函數。Go 語言的函數和其它語言的用法類似,但是 Go 語言中所有東西都是變量,包括函數,函數在 Go 語言中也是變量的一種,所以函數名的命名規則和變量名相同,同時這個和我們后面要講解的函數式編程有關,目前本文僅介紹 Go 語言中函數的聲明和使用。 1. 函數的定義和使用 Go 語言中,通過?func?關鍵字來聲明和定義函數。Go 語言和 C 語言不同,Go 語言函數的聲明和定義是一起的,不存在先聲明在定義,且聲明時不分前后均可互相調用。 代碼示例 代碼塊…
-
Go 語言的通道
Go 語言中有一個特殊的類型?chan,這是在 Go 語言的多線程操作中非常重要的一個數據類型。它的一般用于線程之間的數據傳輸,所以這個操作類型叫做"通道(channel)"。 1. 通道的聲明和定義 通道可以理解為一種特殊的變量,所以它的聲明和其它變量的聲明并沒有太大的區別,聲明通道變量的寫法如下: var c chan int //聲明一個存放int類型數據的通道 代碼塊 1 但是它聲明之后并不能直接使用,需要使用內置函數?make()?來創建一下通道變量才可以使用: Tips…
-
Go 語言的循環語句
在 Go 語言中減少了循環語句的關鍵字,僅有一個?for?關鍵字。但是并沒有減少其功能,而且它更是兼容了其它語言中的while關鍵字的用法,甚至更強大。 1. for 循環語句 1.1 普通用法 在 Go 語言中,for 循環之后一樣可以跟三個語句,單次表達式;條件表達式;末尾循環體,但是它不需要使用()來包裹這三個表達式,寫法上更加的簡潔。同時它也和其它語言一樣,可以任意省略這三個表達式。 代碼示例: 代碼塊 1? package main 2 3? import …
-
Go 語言的分支語句
本文主要學習 Go 語言中的分支語句。一共要介紹的有兩個,分別式?if…else?和?switch…case。他們二者在 Go 語言中都做了新的功能拓展。 Tips:其中還有一個分支語句select…case我們將在Go語言的通道中介紹。 1. if…else 在 Go 語言中?if?關鍵字的作用和其它大部分語言相同,是用于測試某個布爾表達式或布爾值是否為真的。若為真則執行if之后{}中的語句,否則跳過這些語句。如果存在第二個分支,則需要使用?else?關鍵字,還需要增加分支的話就…