2017-03-07 1 views
-1

ich auf die folgende Frage vor kurzem golang in Verwendung gekommen bin. Ist es in Ordnung, einen Funktionskörper wie JavaScript an einen Funktionsaufruf zu übergeben? z.B. setTimeout(function(i){console.log("input:", i)}, 1000).Übergeben Sie einen Funktionskörper/Defintion als Parameter auf einen Funktionsaufruf in golang

Es ist ziemlich üblich, eine anonyme Funktion an eine andere Funktion in Javascript zu übergeben. Ich habe mich gefragt, ob das gleiche in geht?

package main 

import (
    "fmt" 
) 

type HandlerFunc func(int) 

func main() { 
    // define a function as object/variable? 
    hnd := func(in int){ 
     fmt.Println("func handler returns input", in); 
    } 
    a:=HandlerFunc(hnd) //pass function object/variable to type HandlerFunc 
    a(10) 

    // pass function body directly to type HandlerFunc 
    b:=HandlerFunc(func(_in int){ 
     fmt.Println("another func handler returns input", _in); 
    }) 
    b(100) 

    fmt.Println("Hello, playground") 
} 

Sie beide Werke, aber ich frage mich, ob es einen Unterschied zwischen diesen beiden verwendet wird, und welches ist mehr vorzuziehen?

+2

Sie passieren nicht Funktionen im Code, die Sie gerade speichern Funktionswerte in lokalen Variablen, die Sie dann rufen. Sehen Sie diese ähnliche Frage: [Erste-Klasse-Funktionen in Go] (http://stackoverflow.com/questions/4358031/first-class-functions-in-go) – icza

+1

Es macht keinen Unterschied. – Nadh

+0

Danke @icza. Ich fand, dass es keinen Unterschied machen sollte, einer meiner Kollegen scheint anders zu denken. Was mich interessiert, ist, dass ich im zweiten Stil kein Stück Code online schreiben konnte, während es in Javascript so üblich ist (ich wechsle gerade vor ein paar Wochen von Javascript zu Golang). Außerdem gibt es keine den Heap und Stack in Golang des spec zu erwähnen, es sieht aus, dass Golang intelligent genug ist dynamisch Speicher zuweisen, so dass Benutzer nicht auf die Speicher wie undichten egal c/C++. Habe ich recht? –

Antwort

1

Es gibt keinen Unterschied ist, verwenden Sie die eine, die besser zu Ihrem Stil passt.

Verwandte Themen