go語言筆記——append是內置的函數!!!new是一個函數!!!調試可以使用閉包,本質上是print調試,尼瑪!
阿新 • • 發佈:2017-05-16
... -c map blob 名稱 ebo bsp 處理機制 它的
或
內置函數
Go 語言擁有一些不需要進行導入操作就可以使用的內置函數。它們有時可以針對不同的類型進行操作,例如:len、cap 和 append,或必須用於系統級的操作,例如:panic。因此,它們需要直接獲得編譯器的支持。
以下是一個簡單的列表,我們會在後面的章節中對它們進行逐個深入的講解。
名稱 | 說明 |
---|---|
close | 用於管道通信 |
len、cap | len 用於返回某個類型的長度或數量(字符串、數組、切片、map 和管道);cap 是容量的意思,用於返回某個類型的最大容量(只能用於切片和 map) |
new、make | new 和 make 均是用於分配內存:new 用於值類型和用戶定義的類型,如自定義結構,make 用於內置引用類型(切片、map 和管道)。它們的用法就像是函數,但是將類型作為參數:new(type)、make(type)。new(T) 分配類型 T 的零值並返回其地址,也就是指向類型 T 的指針(詳見第 10.1 節)。它也可以被用於基本類型:v := new(int) |
copy、append | 用於復制和連接切片 |
panic、recover | 兩者均用於錯誤處理機制 |
print、println | 底層打印函數(詳見第 4.2 節),在部署環境中建議使用 fmt 包 |
complex、real imag | 用於創建和操作復數(詳見第 4.5.2.2 節) |
6.10 使用閉包調試
當您在分析和調試復雜的程序時,無數個函數在不同的代碼文件中相互調用,如果這時候能夠準確地知道哪個文件中的具體哪個函數正在執行,對於調試是十分有幫助的。您可以使用 runtime
log
包中的特殊函數來實現這樣的功能。包 runtime
中的函數 Caller()
提供了相應的信息,因此可以在需要的時候實現一個 where()
閉包函數來打印函數執行的位置:
where := func() {
_, file, line, _ := runtime.Caller(1)
log.Printf("%s:%d", file, line)
}
where()
// some code
where()
// some more code
where()
您也可以設置 log
包中的 flag 參數來實現:
log.SetFlags(log.Llongfile)
log.Print("")
或使用一個更加簡短版本的 where
函數:
var where = log.Print func func1() { where() ... some code where() ... some code where() }
計算函數執行時間
有時候,能夠知道一個計算執行消耗的時間是非常有意義的,尤其是在對比和基準測試中。最簡單的一個辦法就是在計算開始之前設置一個起始時候,再由計算結束時的結束時間,最後取出它們的差值,就是這個計算所消耗的時間。想要實現這樣的做法,可以使用 time
包中的 Now()
和 Sub
函數:
start := time.Now()
longCalculation()
end := time.Now()
delta := end.Sub(start)
fmt.Printf("longCalculation took this amount of time: %s\n", delta)
摘自:https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/06.10.md
go語言筆記——append是內置的函數!!!new是一個函數!!!調試可以使用閉包,本質上是print調試,尼瑪!