《Go學習筆記》讀書筆記
阿新 • • 發佈:2020-09-20
目錄
writer:zgx
lastmodify:20200919
第四章——函式
- 無須前置宣告
- 不支援命名巢狀編譯
- 不支援預設引數
- 支援不定長變參
- 支援多返回值
- 支援命名返回值
- 支援匿名函式和閉包
ERROR
func xxx()
{
}
syntax error: unexpected semicolon or newline before {
函式屬於第一類物件,具備相同簽名(引數及其返回值列表)的視為同一型別
第一類物件(first-class object)指可在執行期建立,可用作函式引數或返回值,可存入變數的實體。最常見的用法是匿名函式
使用命名型別更加方便
type FormatFunc func(string s, ...interface{}) (string, error)
func format(f FormatFunc, s string, a ...interface{}) (string, error){
return f(s, a...)
}
golang建議命名
這篇寫的還是挺詳細的
實現傳出引數(out),通常建議使用返回值。當然也可使用二級指標
package main func test(p **int) { x := 100 *p = &x } func main() { var p *int test(&p) println(*p) }
變參
變參本質上就是一個切片。只能接收一到多個同類型引數,必須放在列表尾部
package main
import "fmt"
func test(s string, a ...int) {
fmt.Printf("%T %v\n", a, a)
}
func main() {
test("xx", 1, 2, 3, 4)
}
go run main.go
[]int [1 2 3 4]
將切片作為變參時,需要進行展開操作。如果是陣列,需要先轉為切片
package main import "fmt" func test(a ...int) { fmt.Println(a) } func test_1(a ...int) { for i := range a { a[i] += 100 } } func main() { a := [3]int{1, 2, 3} test_1(a[:]...) test(a[:]...) }
[101 102 103]
返回值
借鑑自動態語言的多返回值模式,函式得以返回更多狀態,尤其是error模式