Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Att Skicka Funktioner Som Argument | Funktioner
Introduktion till Golang

bookAtt Skicka Funktioner Som Argument

En annan användbar funktion är möjligheten att skicka funktioner som argument till andra funktioner.

Som en påminnelse är den grundläggande syntaxen för en funktion med parametrar följande:

func myFunc(param1 datatype, param2 datatype, ...) optional_return_type {
      // Code
      // Optional return statement
}

Vi använder följande syntax för att specificera datatypen för parametern när vi skickar den till en funktion:

func(datatype, datatype, …) return_datatype

Nyckelordet func följs av kommaseparerade datatyper för parametrarna till den funktionen inom parenteser. Dessutom specificerar vi returdatatypen för den förväntade funktionen eller uppsättningen av funktioner, om tillämpligt.

Ett exempel kan hjälpa till att illustrera detta koncept:

index.go

index.go

copy
12345678910111213141516
package main import "fmt" func nTimes(n int, msg string) { for i := 0; i < n; i++ { fmt.Println(msg) } } func printFiveTimes(msg string, show func(int, string)) { show(5, "Hello World") } func main() { printFiveTimes("HelloWorld", nTimes) }

I exemplet ovan skickar vi en funktion med namnet nTimes som ett argument till funktionen printFiveTimes. Datatypen för parametern show i definitionen av funktionen printFiveTimes är func(int, string), vilket motsvarar definitionen av funktionen nTimes, det vill säga nTimes(n int, msg string).

Nu ska vi titta på ett exempel på en funktion med ett returvärde:

index.go

index.go

copy
1234567891011121314151617181920
package main import "fmt" // A factorial is the product of all the numbers from 1 up till n // For-example factorial of 5 is 1x2x3x4x5, which is 120 func factorial(n int) int { var result int = 1; for i := 2; i <= n; i++ { result *= i } return result } func eval(n int, oper func(int) int) int { return oper(n) } func main() { fmt.Println(eval(5, factorial)) }
question mark

Vad blir utdata från följande program:

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 6

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Awesome!

Completion rate improved to 1.96

bookAtt Skicka Funktioner Som Argument

Svep för att visa menyn

En annan användbar funktion är möjligheten att skicka funktioner som argument till andra funktioner.

Som en påminnelse är den grundläggande syntaxen för en funktion med parametrar följande:

func myFunc(param1 datatype, param2 datatype, ...) optional_return_type {
      // Code
      // Optional return statement
}

Vi använder följande syntax för att specificera datatypen för parametern när vi skickar den till en funktion:

func(datatype, datatype, …) return_datatype

Nyckelordet func följs av kommaseparerade datatyper för parametrarna till den funktionen inom parenteser. Dessutom specificerar vi returdatatypen för den förväntade funktionen eller uppsättningen av funktioner, om tillämpligt.

Ett exempel kan hjälpa till att illustrera detta koncept:

index.go

index.go

copy
12345678910111213141516
package main import "fmt" func nTimes(n int, msg string) { for i := 0; i < n; i++ { fmt.Println(msg) } } func printFiveTimes(msg string, show func(int, string)) { show(5, "Hello World") } func main() { printFiveTimes("HelloWorld", nTimes) }

I exemplet ovan skickar vi en funktion med namnet nTimes som ett argument till funktionen printFiveTimes. Datatypen för parametern show i definitionen av funktionen printFiveTimes är func(int, string), vilket motsvarar definitionen av funktionen nTimes, det vill säga nTimes(n int, msg string).

Nu ska vi titta på ett exempel på en funktion med ett returvärde:

index.go

index.go

copy
1234567891011121314151617181920
package main import "fmt" // A factorial is the product of all the numbers from 1 up till n // For-example factorial of 5 is 1x2x3x4x5, which is 120 func factorial(n int) int { var result int = 1; for i := 2; i <= n; i++ { result *= i } return result } func eval(n int, oper func(int) int) int { return oper(n) } func main() { fmt.Println(eval(5, factorial)) }
question mark

Vad blir utdata från följande program:

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 6
some-alt