Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung von Funktionen als Werte und Typen in Golang

Detaillierte Erläuterung von Funktionen als Werte und Typen in Golang

藏色散人
藏色散人nach vorne
2020-11-13 13:58:492508Durchsuche

-Tutorialspalte vorgestellt, um die Funktion in Golang als Wert und Typ vorzustellen. Ich hoffe, dass es den Freunden in Not hilfreich sein wird!

Detaillierte Erläuterung von Funktionen als Werte und Typen in GolangEinführung

In der Go-Sprache können wir die Funktion als Variable verwenden und den Typ verwenden, um sie zu definieren. Anschließend kann dieser Funktionstyp als Wert übergeben werden, und sogar Methoden können implementiert werden so flexibel, dass wir diese Funktion manchmal sogar zur Typkonvertierung verwenden können. Voraussetzung für die Übergabe als Wert ist, dass die Typen die gleichen Parameter und den gleichen Rückgabewert haben.

Typkonvertierung von Funktionen

Das Grundformat der Typkonvertierung in der Go-Sprache ist wie folgt:
type_name(expression)
Zum Beispiel:

package main        import "fmt"        type CalculateType func(int, int) 
// 声明了一个函数类型        
// 该函数类型实现了一个方法    
func (c *CalculateType) Serve() {      
fmt.Println("我是一个函数类型")    }        
// 加法函数    
func add(a, b int) {      
fmt.Println(a + b)    }        
// 乘法函数    
func mul(a, b int) {      
fmt.Println(a * b)    }        
func main() {      a := CalculateType(add) 
// 将add函数强制转换成CalculateType类型      
b := CalculateType(mul) 
// 将mul函数强制转换成CalculateType类型      
a(2, 3)      b(2, 3)      a.Serve()      b.Serve()    }        
// 5    
// 6    
// 我是一个函数类型    
// 我是一个函数类型

Wie oben wird ein CalculateType-Funktionstyp deklariert und die Serve()-Methode implementiert und haben die gleichen Parameter. Add und mul müssen in den Funktionstyp CalculateType konvertiert werden, und beide Funktionen verfügen über die Serve()-Methode des Funktionstyps CalculateType.

Funktion zur Parameterübergabe

package main        import "fmt"        
type CalculateType func(a, b int) int 
// 声明了一个函数类型        
// 加法函数    func add(a, b int) int {      return a + b    }        
// 乘法函数    func mul(a, b int) int {      return a * b    }        
func Calculate(a, b int, f CalculateType) int {      return f(a, b)    }        
func main() {      a, b := 2, 3      fmt.Println(Calculate(a, b, add))      
fmt.Println(Calculate(a, b, mul))    }    
// 5    
// 6

Wie im obigen Beispiel ist der f-Parametertyp von Calculate CalculateType, die Funktionen add und mul haben die gleichen Parameter und Rückgabewerte wie der Funktionstyp CalculateType, also add und mul-Funktionen können als Parameter in der Funktion an Calculate übergeben werden. Beispiel für den Quellcode eines Net/http-Pakets Folgendes Beispiel:
// HandleFunc registers the handler function for the given pattern    
// in the DefaultServeMux.    
// The documentation for ServeMux explains how patterns are matched.    func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {      DefaultServeMux.HandleFunc(pattern, handler)    }
Da HandlerFunc ein Funktionstyp ist und die Funktion sayHi denselben Parameterwert wie der Funktionstyp HandlerFunc hat, kann die Konvertierung von sayHi in HandlerFunc erzwungen werden. Daher verfügt sayHi auch über die Methode ServeHTTP (). Implementiert die Handler-Schnittstelle. Gleichzeitig führt die ServeHTTP-Methode von HandlerFunc die Funktion sayHi aus. Es ist ersichtlich, dass sayHi das Ausführungsergebnis nach dem Aufruf des Handlers ist.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung von Funktionen als Werte und Typen in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen