Go语言如何在闭包里使用全局变量?

package main

import (
    "fmt"
    "os"
    "path/filepath"
)

var Files []string

func main() {
    /*
    wc, _ := os.Getwd()
    var directory = flag.String("dir", wc, "which dir you wanna scan")
    flag.Parse()
    */

    err := Scan("/usr/local/var/www/app")

    if err == nil {
        fmt.Println("files:")
        fmt.Sprintf("%v\n", Files)
    } else {
        fmt.Println("errors:")
        fmt.Fprintf(os.Stderr, "%v", err)
    }
}

func Scan(path string) error {
    err := filepath.Walk(path, func (path string, f os.FileInfo, err error) error {
        if f == nil {
            return err
        }

        if f.IsDir() {
            return nil
        }

        Files = append(Files, path)

        return nil
    })

    return err
}

上述代码并不能将path push到Files全局变量里面,我该怎么办?

阅读 4.3k
3 个回答

怎么不可以用了,你把

fmt.Sprintf("%v\n", Files)

改成

fmt.Println(Files)

看看

在后面加个fmt.Println(len(Files))
fmt.Sprintf("%v\n", Files) 换成 fmt.Println(Files)就好了。。。。

没发现什么不对的,楼上说的没错 Sprintf

// Sprintf formats according to a format specifier and returns the resulting string.
func Sprintf(format string, a ...interface{}) string {
    p := newPrinter()
    p.doPrintf(format, a)
    s := string(p.buf)
    p.free()
    return s
}

注释说的很清楚的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题