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

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

藏色散人
Freigeben: 2020-11-13 13:58:49
nach vorne
2564 Leute haben es durchsucht

-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)
Nach dem Login kopieren
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    
// 我是一个函数类型    
// 我是一个函数类型
Nach dem Login kopieren

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
Nach dem Login kopieren

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)    }
Nach dem Login kopieren
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!

Verwandte Etiketten:
Quelle:learnku.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage