Skywalker: The Easy Way to Concurrent File System Traversal in Go


Skywalker is a package to allow one to concurrently go through a filesystem with ease.


  • Concurrency
  • BlackList filtering
  • WhiteList filtering
  • Filter by Directory
  • Filter by Extension
  • Glob Filtering (provided by gobwas/glob)

For matching to work properly across platforms. Please use /. In gobwas/glob the \ is an escape character (so you can escape *, ?, etc...) making it difficult to know if you want to escape a character or go into directory.


package main

import (


type ExampleWorker struct {
    found []string

func (ew *ExampleWorker) Work(path string) {
    //This is where the necessary work should be done.
    //This will get concurrently so make sure it is thread safe if you need info across threads.
    defer ew.Unlock()
    ew.found = append(ew.found, path)

func main() {
    //Following two functions are only to create and destroy data for the example
    defer teardownData()

    ew := new(ExampleWorker)
    ew.Mutex = new(sync.Mutex)

    //root is the root directory of the data that was stood up above
    sw := skywalker.New(root, ew)
    sw.DirListType = skywalker.LTBlacklist
    sw.DirList = []string{"sub"}
    sw.ExtListType = skywalker.LTWhitelist
    sw.ExtList = []string{".pdf"}
    err := sw.Walk()
    if err != nil {
    for _, f := range ew.found {
        fmt.Println(strings.Replace(f, sw.Root, "", 1))

Download Details:

Author: Dixonwille
Source Code: 
License: BSD-3-Clause license

#go #golang 

Skywalker: The Easy Way to Concurrent File System Traversal in Go
1.05 GEEK