2016-10-14 23 views
1

私は次のコードを持っている:Golangコールバック関数で変数を渡す方法は?

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) 
} 

を私が解決したい問題は、私はloopThroughDirs()serviceを使用したい、これです。これはどうすればいいですか?

PS: loopThroughDirsの機能はfilepath.Walk()のコールバックと呼ばれますか?

答えて

3

ます。またWalkFunc機能を返して試すことができます:

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

ありがとう、非常に便利です。これはGoでどのように呼び出されますか?私は 'コールバック'が間違っていると仮定します: - P –

+0

'getWalkFunc'は基本的にクロージャを返します。ここでそれらの詳細を読むことができます:http://stackoverflow.com/documentation/go/2741/closures/9226/closure-basics – abhink

2

一つの方法は、main内の匿名loopThroughDirsを宣言することにより、次のとおりです。

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

は本当に便利、ありがとうございますが、このような状況のために私は行きますよ他の答えのために。 –

関連する問題