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

发布于 2022-09-05 15:43:21 字数 827 浏览 19 评论 0

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全局变量里面,我该怎么办?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

冬天的雪花 2022-09-12 15:43:21

怎么不可以用了,你把

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

改成

fmt.Println(Files)

看看

过去的过去 2022-09-12 15:43:21

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

梦魇绽荼蘼 2022-09-12 15:43:21

没发现什么不对的,楼上说的没错 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
}

注释说的很清楚的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文