Technologieaustausch

[Go – 5 häufige Arten der Funktionsnutzung]

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Funktion

Funktion gehtfunc Schlüsselwortdefinition, gefolgt von Funktionsname, Parameterliste und Rückgabetyp. Die Syntax lautet wie folgt:

func functionName(parameters) returnType {
    // 函数体
}
  • 1
  • 2
  • 3

Beispiel

func add(x int, y int) int {
    return x + y
}

func swap(x, y string) (string, string) {
    return y, x
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Variadische Funktion

func sum(nums ...int) int {
    total := 0
    for _, num := range nums {
        total += num
    }
    return total
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

anonyme Funktion

	s := (func () string {
		return "anonymous-function"
	})()
	fmt.Println(s)
  • 1
  • 2
  • 3
  • 4

**Funktionen höherer Ordnung, **Funktionen als Parameter und Rückgabewerte

Funktionen können auch als Parameter übergeben oder als Rückgabewerte ausgegeben werden.

// 函数作为参数
func compute(fn func(float64, float64) float64) float64 {
    return fn(3, 4)
}

// 函数作为返回值
func getComputeFunc() func(int, int) int  {
   return func(x, y int) int {
       return x + y
   }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

Schließung


func intSeq() func() int {
    i := 0
    return func() int {
        i++
        return i
    }
}

// 调用
func main() {
    incfunc := intSeq()
    fmt.Println(incfunc())
    fmt.Println(incfunc())
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Das Wesen der Schließung ist eine Erweiterung des Geltungsbereichs.
Beispielsweise wird i in intSeq im Müll gesammelt, wenn es nicht an anderer Stelle referenziert wird. Da es jedoch in incfunc einen Verweis darauf gibt, kann es nicht recycelt werden. Sein Lebenszyklus wird länger und sein Umfang erweitert.