golang拷貝目錄(持續更新中)

2021-10-24 01:29:57 字數 2237 閱讀 5080

思路

首先遍歷源目錄,將所有的目錄和檔案分別儲存在兩個切片中,然後先建立所有的目錄,然後在建立所有的檔案。

目前不會處理連線檔案

上**
package models

import

("bufio"

"errors"

"fmt"

"io"

"os"

"path/filepath"

"strings"

)//walkfile 檔案物件

type walkfile struct

//dir 目錄物件

type dir struct

//visit 瀏覽檔案 區分為目錄和檔案

func

(my *dir)

visit

(path string

, f os.fileinfo, err error

)error

if f.

isdir()

)}else

if(f.

mode()

& os.modesymlink)

>

0else)}

return

nil}

//createdir 建立目錄

func

(my *dir)

createdir

(dest string

, mode os.filemode)

error

}return

nil}

//createfile 建立檔案

func

(my *dir)

createfile

(sr string

, dest string

, mode os.filemode)

error

}else

}//拷貝檔案

srcfile, err := os.

open

(sr)

if err !=

nildefer

func()

}()//通過srcfile,獲取到reader

reader := bufio.

newreader

(srcfile)

//開啟dstfilename

dstfile, err := os.

openfile

(dest, os.o_wronly|os.o_create, mode)

if err !=

nil//通過dstfile,獲取到writer

writer := bufio.

newwriter

(dstfile)

defer

func()

}()_

,copyerr := io.

copy

(writer, reader)

if copyerr !=

nil//修改許可權

chmoderr := os.

chmod

(dest, mode)

if chmoderr !=

nilreturn

nil}

//copydir 複製目錄

func

(my *dir)

copydir

(destparentdir string

)error

)if err !=

nil//create dir

for_

, dirname :=

range my.dirlist

}//create file

for_

, filename :=

range my.filelist

}return

nil}

怎麼使用呢
//parentname 儲存的是父級目錄

//dirname 儲存的目錄名字

assourcedir := models.dir

//進行複製destdir就是目的目錄

enderror := assourcedir.

copydir

(destdir)

if enderror !=

nil

在這方面python還是比較好呀

golang基礎知識點(持續更新中 )

第一次聽說golang應該是在2014年,從朋友那裡聽說。是google開發的。但是作為一名比較笨的it民工來講自學一門新語言花費時間和精力太大。也正是因為國內公司現在用的比較少,所以一直沒有去了解。換了新公司後因為工作需要不得不學習go語言以前做過php,node.js也做過前端開發。所以學習起來...

golang 小筆記 要點tips 持續更新中

當接收者為值型別時,無論呼叫者是值型別還是指標型別,接收者的更改都不會影響呼叫者。當接收者是指標型別時,無論呼叫者是值型別還是指標型別,接收者的更改均會影響呼叫者。type person struct func p person getname string func p person setnam...

Golang中常見的問題 持續更新

這裡列舉一些我們學習golang時常遇見的問題,他們都是符合golang語言語法的,可以正常的編譯,但是可能會出現執行結果錯誤,或者是由資源洩露的風險 當引數的可變引數是空介面型別時,傳入空介面的切片時需要注意引數的展開的問題 func main fmt.println a fmt.println ...