英文:
Why does filepath.Walk() panic?
问题
我正在尝试为Go编程语言编写维基百科。
我已经将数据放在/data
文件夹中,将.html
文件放在/tmpl
文件夹中。
我已经编写了以下的main
函数
func main() {
walk := func(path string, info os.FileInfo, err error) error {
if err == nil && !info.IsDir() && filepath.Ext(path) == ".html" {
http.HandleFunc("/view/", makeHandler(viewHandler))
http.HandleFunc("/edit/", makeHandler(editHandler))
http.HandleFunc("/save/", makeHandler(saveHandler))
}
return err
}
root := TEMPLATE_PATH + "edit.html"
err := filepath.Walk(root, walk)
if err != nil {
return
}
}
我得到了panic edit.html not found
的错误。有人可以指导我吗?
英文:
I am trying to code up the wiki for go programing language.
I have put the data in /data
folder and .html
files in the /tmpl
folder.
I have coded up the main
function as follows
func main() {
walk := func(path string, info os.FileInfo, err error) error {
if err == nil && !info.IsDir() && filepath.Ext(path) == ".html" {
http.HandleFunc("/view/", makeHandler(viewHandler))
http.HandleFunc("/edit/", makeHandler(editHandler))
http.HandleFunc("/save/", makeHandler(saveHandler))
}
return err
}
root := TEMPLATE_PATH + "edit.html"
err := filepath.Walk(root, walk)
if err != nil {
return
}
}
I am getting panic edit.html not found
. Could anyone please guide me?
答案1
得分: 1
从filepath.Walk的文档中可以看到:
>func Walk(root string, walkFn WalkFunc) error
>
>Walk遍历以root为根的文件树,对树中的每个文件或目录调用walkFn,包括root。通过walkFn过滤访问文件和目录时出现的所有错误。文件按字典顺序遍历,这使得输出是确定性的,但对于非常大的目录,Walk可能效率低下。
所以Walk
期望第一个参数是一个目录。你把一个文件放在那里,这导致整个过程抛出一个panic。
我不确定你想要做什么,但如果你想要打开那个文件,可以使用os.Open
或者如果你想要测试文件是否存在,可以使用os.Stat
。
在使用Go编码时的一个通用提示:使用gofmt
命令根据样式指南格式化你的代码。
英文:
From the documentation of filepath.Walk you can read:
>func Walk(root string, walkFn WalkFunc) error
>
>Walk walks the file tree rooted at root, calling walkFn for each file or directory in the
>tree, including root. All errors that arise visiting files and directories are filtered by
>walkFn. The files are walked in lexical order, which makes the output deterministic but
>means that for very large directories Walk can be inefficient.
So Walk
expects a directory as first parameter. You're putting a file in there, which
makes the whole thing throw a panic.
I'm not sure what you're attempting to do, but if you want to open that file, use os.Open
or os.Stat
if you want to test for existance.
A general tip when coding in go: Use the gofmt
command to format your code according to the style guidelines.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论