@@ -6,32 +6,51 @@ import (
6
6
"io/ioutil"
7
7
"os"
8
8
"path/filepath"
9
+ "strings"
9
10
)
10
11
11
12
//定义一个访问者结构体
12
13
type Visitor struct {}
13
14
14
- //定义其碰到目录的时候的行为
15
- func (v * Visitor ) VisitDir (path string , f * os.FileInfo ) bool {
16
- fmt .Println (path )
17
- return true
18
- }
19
-
20
- //定义其碰到文件的时候的行为
21
- func (v * Visitor ) VisitFile (path string , f * os.FileInfo ) {
22
- fmt .Println (path )
23
- //@todo 如何读取md文件转化为html
24
- input , err := ioutil .ReadAll ()
25
- output := blackfriday .MarkdownBasic (input )
15
+ func (self * Visitor ) visit (path string , f os.FileInfo , err error ) error {
16
+ if f == nil {
17
+ return err
18
+ }
19
+ if f .IsDir () {
20
+ return nil
21
+ } else if (f .Mode () & os .ModeSymlink ) > 0 {
22
+ return nil
23
+ } else {
24
+ if strings .Contains (f .Name (), ".md" ) {
25
+ fmt .Println (f )
26
+ file , err := os .Open (f .Name ())
27
+ if err != nil {
28
+ return err
29
+ }
30
+ input , _ := ioutil .ReadAll (file )
31
+ output := blackfriday .MarkdownCommon (input )
32
+ var out * os.File
33
+ if out , err = os .Create (f .Name () + ".html" ); err != nil {
34
+ fmt .Fprintf (os .Stderr , "Error creating %s: %v" , f .Name (), err )
35
+ os .Exit (- 1 )
36
+ }
37
+ defer out .Close ()
38
+ if _ , err = out .Write (output ); err != nil {
39
+ fmt .Fprintln (os .Stderr , "Error writing output:" , err )
40
+ os .Exit (- 1 )
41
+ }
42
+ }
43
+ }
44
+ return nil
26
45
}
27
46
28
47
func main () {
29
48
v := & Visitor {}
30
- errors := make ( chan os.Error , 64 ) //错误消息使用64个缓存,可以随意
31
- filepath . Walk ( "./" , v , errors )
32
- select {
33
- case err := <- errors :
34
- panic ( err )
35
- default :
49
+ err := filepath . Walk ( "./" , func ( path string , f os.FileInfo , err error ) error {
50
+ return v . visit ( path , f , err )
51
+ })
52
+
53
+ if err != nil {
54
+ fmt . Printf ( "filepath.Walk() returned %v \n " , err )
36
55
}
37
56
}
0 commit comments