1. 程式人生 > 實用技巧 >《Go學習筆記》讀書筆記

《Go學習筆記》讀書筆記

目錄

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建議命名
這篇寫的還是挺詳細的

refs:https://www.cnblogs.com/Survivalist/p/10110439.html

實現傳出引數(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模式