Go語(yǔ)言掃描目錄并獲取相關(guān)信息的方法
更新時(shí)間:2015年03月02日 12:03:25 作者:兩把刷子
這篇文章主要介紹了Go語(yǔ)言掃描目錄并獲取相關(guān)信息的方法,實(shí)例分析了Go語(yǔ)言操作目錄及文件的技巧,需要的朋友可以參考下
本文實(shí)例講述了Go語(yǔ)言掃描目錄并獲取相關(guān)信息的方法。分享給大家供大家參考。具體分析如下:
前言:最近看到Go里面有一個(gè)func很容易就可以掃描整個(gè)目錄,并且可以得到相應(yīng)的目錄和文件信息,所以我將其進(jìn)行了封裝,拿到file info的所有信息 這樣就可以方便的做其它用途了。
直接上代碼,代碼基于Go version 1
復(fù)制代碼 代碼如下:
package main
import (
"path/filepath"
"os"
"flag"
"fmt"
"time"
)
const (
IsDirectory = iota
IsRegular
IsSymlink
)
type sysFile struct {
fType int
fName string
fLink string
fSize int64
fMtime time.Time
fPerm os.FileMode
}
type F struct {
files []*sysFile
}
func (self *F) visit(path string, f os.FileInfo, err error) error {
if ( f == nil ) {
return err
}
var tp int
if f.IsDir() {
tp = IsDirectory
}else if ( f.Mode() & os.ModeSymlink ) > 0 {
tp = IsSymlink
}else{
tp = IsRegular
}
inoFile := &sysFile{
fName : path,
fType : tp,
fPerm : f.Mode(),
fMtime: f.ModTime(),
fSize : f.Size(),
}
self.files = append( self.files, inoFile )
return nil
}
func main() {
flag.Parse()
root := flag.Arg(0)
self := F{
files: make( []*sysFile, 0 ),
}
err := filepath.Walk(root, func(path string, f os.FileInfo, err error) error {
return self.visit(path, f, err)
})
if err != nil {
fmt.Printf("filepath.Walk() returned %v\n", err)
}
for _, v := range self.files {
fmt.Println( v.fName,v.fSize )
}
}
import (
"path/filepath"
"os"
"flag"
"fmt"
"time"
)
const (
IsDirectory = iota
IsRegular
IsSymlink
)
type sysFile struct {
fType int
fName string
fLink string
fSize int64
fMtime time.Time
fPerm os.FileMode
}
type F struct {
files []*sysFile
}
func (self *F) visit(path string, f os.FileInfo, err error) error {
if ( f == nil ) {
return err
}
var tp int
if f.IsDir() {
tp = IsDirectory
}else if ( f.Mode() & os.ModeSymlink ) > 0 {
tp = IsSymlink
}else{
tp = IsRegular
}
inoFile := &sysFile{
fName : path,
fType : tp,
fPerm : f.Mode(),
fMtime: f.ModTime(),
fSize : f.Size(),
}
self.files = append( self.files, inoFile )
return nil
}
func main() {
flag.Parse()
root := flag.Arg(0)
self := F{
files: make( []*sysFile, 0 ),
}
err := filepath.Walk(root, func(path string, f os.FileInfo, err error) error {
return self.visit(path, f, err)
})
if err != nil {
fmt.Printf("filepath.Walk() returned %v\n", err)
}
for _, v := range self.files {
fmt.Println( v.fName,v.fSize )
}
}
希望本文所述對(duì)大家的Go語(yǔ)言程序設(shè)計(jì)有所幫助。
相關(guān)文章
使用Go+GoQuery庫(kù)實(shí)現(xiàn)頭條新聞采集
在本文中,我們將介紹如何使用Go語(yǔ)言和GoQuery庫(kù)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的爬蟲程序,用于抓取頭條新聞的網(wǎng)頁(yè)內(nèi)容,我們還將使用爬蟲代理服務(wù),提高爬蟲程序的性能和安全性,我們將使用多線程技術(shù),提高采集效率,最后,我們將展示爬蟲程序的運(yùn)行結(jié)果和代碼,需要的朋友可以參考下2023-10-10
go微服務(wù)PolarisMesh源碼解析服務(wù)端啟動(dòng)流程
這篇文章主要為大家介紹了go微服務(wù)PolarisMesh源碼解析服務(wù)端啟動(dòng)流程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Go語(yǔ)言中空白標(biāo)識(shí)符的具體使用
Go語(yǔ)言的空白標(biāo)識(shí)符作為匿名變量,用于占位和忽略多余值,本文主要介紹了Go語(yǔ)言中空白標(biāo)識(shí)符的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下2025-06-06

