defer:呼叫乙個被 defer 的函式時在函式剛要返回之前延遲執行,當函式無論怎樣返回,某資源必須釋放時,可用這種與眾不同、但有效的處理方式。傳統的例子包括解鎖互斥或關閉檔案。
package main
import "log"
func main()
// mydefer()
}/* func mydefer() func() ()
}return func() ()
}*/
error處理
package main
import (
"fmt"
)type dualerror struct
func (e dualerror) error() string
func requiredual(n int) (int, error)
}return n, nil
}func main() else
}
package main
import "fmt"
func main()
for i := 0; i < len(arrayi); i++
slicei := int //slice
for i, _ := range arrayi
fmt.println("after range arr", arrayi)
for i, v := range &arrayi
fmt.println("after range *arr", arrayi)
for i, v := range slicei
fmt.println("after range slice", slicei)
}
package main
import
"fmt"
func main()
fmt.println(i) //undefine i
}
package main
import (
"fmt"
"io"
"os"
)func main() ()
dst, _ = os.openfile("defer2.go", os.o_wronly|os.o_create, 0644)
//_, err := io.copy(dst, src)
buf := make(byte, 1024)
for
if er == io.eof
}}
package main
import (
"fmt"
"reflect"
)type mystruct struct
func main()
val := reflect.valueof(ms).elem()
for i :=0; i < val.numfield(); i++
}}
func (l *logger) output(calldepth int, s string) error
// 真正負責日誌列印的方法,其它級別的列印方法都將會呼叫它
func (l *logger) println(v ...inte***ce{})
func (l *logger) panicln(v ...inte***ce{})
func (l *logger) fatalln(v ...inte***ce{})
error :
實際上是抽象了 error() 方法的 error 介面golang 使用該介面進行標準的錯誤處理
一般情況下,如果函式需要返回錯誤,就將 error 作為多個返回值中的最後乙個(但這並非是強制要求)
Go語言的特性
目前有2個版本的編譯器 go原生編譯器gc和非原生編譯器gccgo編譯器,其中,gc 版本的編譯器已經被移植到 windows 平台上,並整合在主要發行版中,你也可以通過安裝 mingw 從而在 windows 平台下使用 gcc 編譯器。這兩個編譯器都是以單通道的形式工作。編譯器gc編譯速度很快,...
GO語言 陣列特性
go語言 陣列特性 與其他語言不同,go語言陣列預設是按值傳遞,也就是說,陣列變數實際上儲存的是整個陣列而不像其他語言那樣儲存的是指向陣列開頭的指標。因此賦值的時候,如果需要避免額外的記憶體開銷 特別是陣列比較大的情況下 一定要使用取位址符去賦值,而不要直接的使用賦值符號賦值!test string...
Go語言特性學習
go沒有class go的package 類似類的概念,包中的方法如果想被外部訪問必須大寫 協程組成 go邏輯處理器 和cpu數量有關 go排程器 異常處理 package main import fmt func main func f1 func f2 丟擲捕獲 package main imp...