Golang實(shí)現(xiàn)文件夾的創(chuàng)建與刪除的方法詳解
學(xué)習(xí)筆記,寫到哪是哪。
接著上一篇對(duì)純文本文件讀寫操作,主要去實(shí)現(xiàn)一些文件夾操作。
創(chuàng)建文件夾
創(chuàng)建文件夾的時(shí)候往往要先判斷文件夾是否存在。
樣例代碼如下
package main
import (
"bufio"
"fmt"
"io"
"os"
)
//判斷文件夾是否存在
func HasDir(path string) (bool, error) {
_, _err := os.Stat(path)
if _err == nil {
return true, nil
}
if os.IsNotExist(_err) {
return false, nil
}
return false, _err
}
//創(chuàng)建文件夾
func CreateDir(path string) {
_exist, _err := HasDir(path)
if _err != nil {
fmt.Printf("獲取文件夾異常 -> %v\n", _err)
return
}
if _exist {
fmt.Println("文件夾已存在!")
} else {
err := os.Mkdir(path, os.ModePerm)
if err != nil {
fmt.Printf("創(chuàng)建目錄異常 -> %v\n", err)
} else {
fmt.Println("創(chuàng)建成功!")
}
}
}
func main() {
CreateDir("./output")
}執(zhí)行結(jié)果
創(chuàng)建成功!
Process finished with the exit code 0
注意
1、其中os.ModePerm主要是對(duì)創(chuàng)建文件夾的授權(quán),了解linux的會(huì)比較熟悉。
其中 ModePerm FileMode = 0777,也就是最高權(quán)限,可讀可寫可執(zhí)行。
也可以直接使用os.FileMode(644).String()。
刪除文件和文件夾
使用os.Remove方法來(lái)刪除文件,使用os.RemoveAll方法來(lái)刪除文件夾。
可以看一下RemoveAll的內(nèi)部實(shí)現(xiàn),整體上就是遍歷和遞歸操作。
樣例代碼如下
//刪除文件
func RemoveFile(path string) error {
_err := os.Remove(path)
return _err
}
//刪除文件夾
func RemoveDir(path string) error {
_err := os.RemoveAll(path)
return _err
}小結(jié)
總的來(lái)說(shuō)直接使用os,和Python一樣,麻煩,還是得找個(gè)工具庫(kù)來(lái)操作,方便簡(jiǎn)潔一點(diǎn)。而且一直往上傳遞error的方式讓我頭大,好煩啊。
補(bǔ)充
當(dāng)然Golang還能實(shí)現(xiàn)一些常見(jiàn)的文件操作,如網(wǎng)絡(luò)文件下載,讀寫csv文件等,以下是實(shí)現(xiàn)代碼
網(wǎng)絡(luò)文件下載
package main
import (
"fmt"
"github.com/zhangdapeng520/zdpgo_file"
)
func main() {
f := zdpgo_file.New()
savePath := "./"
// 單個(gè)下載
url := "https://avatar.csdnimg.cn/2/9/0/1_togolife.jpg"
err := f.Download.Download(savePath, url)
if err != nil {
fmt.Println("下載失?。?, err)
} else {
fmt.Println("下載成功")
}
// 批量下載
urls := []string{
"https://alifei04.cfp.cn/creative/vcg/nowarter800/new/VCG41N695593548.jpg",
"https://tenfei02.cfp.cn/creative/vcg/nowarter800/new/VCG41N1014325904.jpg",
"https://tenfei05.cfp.cn/creative/vcg/nowater800/new/VCG41545444880.jpg",
}
f.Download.Downloads(savePath, urls)
}
讀寫csv
package main
import (
"fmt"
"github.com/zhangdapeng520/zdpgo_file"
)
func main() {
f := zdpgo_file.New()
data := [][]string{
{"a", "b", "c"},
{"111", "222", "333"},
{"111", "222", "333"},
{"111", "222", "333"},
{"111", "222", "333"},
{"111", "222", "333"},
{"111", "222", "333"},
{"111", "222", "333"},
{"111", "222", "333"},
{"111", "222", "333"},
{"111", "222", "333"},
}
// 寫入
f.Csv.Write("test.csv", data)
// 讀取
dataNew, err := f.Csv.Read("test.csv")
if err != nil {
fmt.Println(err)
}
fmt.Println(dataNew)
}
到此這篇關(guān)于Golang實(shí)現(xiàn)文件夾的創(chuàng)建與刪除的方法詳解的文章就介紹到這了,更多相關(guān)Golang文件夾創(chuàng)建 刪除內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Windows下在CMD下執(zhí)行Go出現(xiàn)中文亂碼的解決方法
在cmd下運(yùn)行g(shù)o程序或者是GOLAND的Terminal下運(yùn)行g(shù)o程序會(huì)出現(xiàn)中文亂碼的情況。本文就詳細(xì)的介紹下解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下2021-12-12
Golang IPv4 字符串與整數(shù)互轉(zhuǎn)方式
這篇文章主要介紹了Golang IPv4 字符串與整數(shù)互轉(zhuǎn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
Golang連接池的幾種實(shí)現(xiàn)案例小結(jié)
這篇文章主要介紹了Golang連接池的幾種實(shí)現(xiàn)案例小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Golang?Compare?And?Swap算法詳細(xì)介紹
CAS算法是一種有名的無(wú)鎖算法。無(wú)鎖編程,即不使用鎖的情況下實(shí)現(xiàn)多線程之間的變量同步,也就是在沒(méi)有線程被阻塞的情況下實(shí)現(xiàn)變量的同步,所以也叫非阻塞同步Non-blocking?Synchronization2022-10-10
go責(zé)任鏈行為型設(shè)計(jì)模式Chain?Of?Responsibility
這篇文章主要為大家介紹了go行為型設(shè)計(jì)模式之責(zé)任鏈Chain?Of?Responsibility使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
go?module化?import?調(diào)用本地模塊?tidy的方法
這篇文章主要介紹了go?module化?import?調(diào)用本地模塊?tidy的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09
Go語(yǔ)言實(shí)現(xiàn)新春祝福二維碼的生成
二維碼現(xiàn)在是隨處度可以看到,買東西,支付,添加好友只要你掃一掃就能完成整個(gè)工作,簡(jiǎn)單且方便。所以利用這個(gè)新春佳節(jié)做一個(gè)帶著新春祝福的二維碼吧2023-02-02

