close
func close(c chan<- Type)
close用於關閉一個channel,使用close函數要注意以下幾點:
- 關閉一個只接受的channel會導致錯誤
- 在一個已經關閉的channel上發送數據會導致panic
- 關閉一個nil channel會導致panic
- 在一個channel關閉之后,如果channel已經沒有剩余數據等待接受了,這時候如果繼續接收,會返回一個channel對應數據類型的nil value,如果接收的時候使用多返回值,第二個參數表示一個channel是否已經關閉。
len、cap
len:獲取容器已存儲的元素個數,不是容器的容量。
func len(v Type) int
cap:獲取容器的最大存儲元素的容量。
func cap(v Type) int
len和cap都接收多種類型的參數,返回值是int類型,具體接收哪些類型的參數以及返回的值的含義見下表
len,cap的返回值滿足如下條件:
- 0<=len(s)<=cap(s)
- slice,map,channel的nil值的len為0
- slice,channel的nil值的cap為0
append
append函數可以為切片動態添加元素,然后返回新的切片變量。
func append(slice []Type, elems ...Type) []type
slice為需要追加的源切片,elems為可變參數列表,返回值為追加后的切片。
在調用此函數時,通常需要以slice接收追加后的返回切片,否則slice仍為追加前的數據。
實例:
var a []int a = append(a, 1) // 追加1個元素 a = append(a, 1, 2, 3) // 追加多個元素, 手寫解包方式 a = append(a, []int{1,2,3}...) // 追加一個切片, 切片需要解包
不過需要注意的是,在使用 append() 函數為切片動態添加元素時,如果空間不足以容納足夠多的元素,切片就會進行“擴容”,此時新切片的長度會發生改變。
delete
delete函數用於刪除map中對應key的鍵值對,如果map中不存在該key,則什么也不做
func delete(m map[Type]Type1, key Type)
new
new函數用來分配內存,一般是一個參數,參數為類型,它的返回值是一個指向新分配類型的指針,並且內存置為零。
func new(Type) *Type
new經常用來初始化結構體。
make
func make(Type, size IntegerType) Type
內建函數 make 用來為 slice,map 或 chan 類型分配內存和初始化一個對象(注意:只能用在這三種類型上)。
跟 new 相同的是,第一個參數也是一個類型,跟 new 不同的是,make 返回類型的引用而不是指針,而返回值也依賴於具體傳入的類型。
m>=n,且n和m必須是整型且不能為負數。
copy
copy() 可以將一個數組切片復制到另一個數組切片中,如果加入的兩個數組切片不一樣大,就會按照其中較小的那個數組切片的元素個數進行復制。
srcSlice 為數據來源切片,destSlice 為復制的目標(也就是將 srcSlice 復制到 destSlice),目標切片必須分配過空間且足夠承載復制的元素個數,並且來源和目標的類型必須一致,copy() 函數的返回值表示實際發生復制的元素個數。
copy( destSlice, srcSlice []T) int
實例:
slice1 := []int{1, 2, 3, 4, 5} slice2 := []int{5, 4, 3} copy(slice2, slice1) // 只會復制slice1的前3個元素到slice2中 copy(slice1, slice2) // 只會復制slice2的3個元素到slice1的前3個位置
complex
complex 用於創建一個復數並返回。
func complex(r,i FloatType) ComplexType
參數列表中r 為復數的實部,i 表示為復數的虛部。
real
func real(c ComplexType) FloatType
real函數用於獲取一個復數的實部。
imag
func imag(c ComplexType) FloatType
imag函數用於獲取一個復數的虛部。
panic
func panic(v interface{})
panic 表示進程內的錯誤。panic 的原因來自於代碼的邏輯 bug,比如強制類型轉換失敗,比如數組越界。這個代表了程序員的責任不到位,導致了程序的panic。
error 代表進程外的錯誤。比如輸入符合預期。比如訪問外部的服務失敗。這些都不是程序員可以設計控制的。這些情況的錯誤處理是業務邏輯的一部分。
golang中提供panic用於錯誤處理。
panic,直譯為運行時恐慌,當panic被拋出異常后,如果我們沒有在程序中添加任何保護措施的話,程序就會打印出panic的詳細情況之后,終止運行。