2016-10-14 5 views
1

Ich habe den folgenden Code:Wie übergibt man eine Variable in einer Golang Callback-Funktion?

func loopThroughDirs(path string, fileInfo os.FileInfo, err error) error { 
    ...do something with service... 
    return nil 
} 

func main() { 
    service, err := storage.New(client) 
    ... 
    filepath.Walk(*dirName, loopThroughDirs) 
} 

Das Problem, das ich lösen will, das ist, möchte ich serviceinnenloopThroughDirs() verwenden. Wie mache ich das?

PS: Ist die loopThroughDirs Funktion innerhalb filepath.Walk() einen Rückruf in Go aufgerufen?

Antwort

3

können Sie auch eine WalkFunc Funktion versuchen Rückkehr:

func main() { 
    service, err := storage.New(client) 
    ... 
    filepath.Walk(*dirName, getWalkFunc(service)) 
} 

func getWalkFunc(service storage.Service) filepath.WalkFunc { 
    return func(path string, fileInfo os.FileInfo, err error) error { 
     // ...do something with service... 
     return nil 
    } 
} 
+0

Danke, sehr hilfreich. Wie heißt das in Go? Ich nehme an, 'Rückruf' ist falsch: - P –

+0

'getWalkFunc' gibt im Grunde eine Schließung. Sie können mehr über sie hier lesen: http://stackoverflow.com/documentation/go/2741/closures/9226/closure-basics – abhink

2

Eine Möglichkeit ist durch loopThroughDirs anonym innerhalb main erklärt:

func main() { 
    service, err := storage.New(client) 
    ... 
    filepath.Walk(*dirName, func(path string, fileInfo os.FileInfo, err error) error { 
     ...do something with service... 
     return nil 
    }) 
} 
+0

Danke, wirklich hilfreich, aber für diese Situation werde ich für die andere Antwort. –

Verwandte Themen