Go目录文件路径操作的实现

 更新时间:2023年10月23日 08:33:24   作者:Looooking  
在Go语言中,可以使用绝对路径或相对路径来表示文件路径,本文就来介绍一下Go目录文件路径操作,感兴趣的可以了解一下

os.ReadDir()

读取目录

package main

import (
	"fmt"
	"os"
)

func main() {
	dirs, err := os.ReadDir("./search")
	if err != nil {
		fmt.Println(err)
	}
	for _, dir := range dirs {
		fileinfo, _ := dir.Info()
		fmt.Println(fileinfo)
		fmt.Println("is_dir:", dir.IsDir(), "name:", dir.Name())
	}
}

os.Chdir()

切换目录

package main

import (
	"fmt"
	"os"
)

func main() {
	currentDir, _ := os.Getwd()
	fmt.Println("current_dir:", currentDir) // current_dir: D:\Project\test_go\test
	err := os.Chdir("./search")
	if err != nil {
		fmt.Println(err)
	}
	currentDir, _ = os.Getwd()
	fmt.Println("current_dir:", currentDir) // current_dir: D:\Project\test_go\test\search
}

os.Chmod()

修改文件或目录权限

package main

import (
	"fmt"
	"os"
)

var FileMode os.FileMode = 0400 // go的Windows权限模式不同于Linux, 0200和0600读写,0400只读

func main() {
	const FilePath = "./search/default.go"
	fileinfo, _ := os.Stat(FilePath)
	fmt.Println(fileinfo.Mode()) // -rw-rw-rw-
	err := os.Chmod(FilePath, FileMode)
	if err != nil {
		fmt.Println(err)
	}
	fileinfo, _ = os.Stat(FilePath)
	fmt.Println(fileinfo.Mode()) // -r--r--r--
}
package main

import (
	"fmt"
	"os"
)

var FileMode os.FileMode = 0400 // go的Windows权限模式不同于Linux, 0200和0600读写,0400只读

func main() {
	const FilePath = "./search"
	fileinfo, _ := os.Stat(FilePath)
	fmt.Println(fileinfo.Mode()) // drwxrwxrwx
	err := os.Chmod(FilePath, FileMode)
	if err != nil {
		fmt.Println(err)
	}
	fileinfo, _ = os.Stat(FilePath)
	fmt.Println(fileinfo.Mode()) // dr-xr-xr-x
}

os.Mkdir()

创建目录

package main

import (
	"log"
	"os"
)

var DirMode os.FileMode = 0755

func main() {
	err := os.Mkdir("test", DirMode)
	if err != nil {
		log.Print(err)
	}
}

os.MkdirAll()

递归创建目录

package main

import (
	"log"
	"os"
)

var DirMode os.FileMode = 0755

func main() {
	err := os.MkdirAll("test/test/test", DirMode)
	if err != nil {
		log.Print(err)
	}
}

os.Remove()

删除目录或文件

package main

import (
	"log"
	"os"
)

func main() {
	err := os.Remove("test/test/test")
	if err != nil {
		log.Print(err)
	}
}

os.RemoveAll()

递归删除目录

package main

import (
	"log"
	"os"
)

func main() {
	err := os.RemoveAll("test")
	if err != nil {
		log.Print(err)
	}
}

os.Rename()

目录重命名

package main

import (
	"log"
	"os"
)

func main() {
	oldName := "test"
	newName := "dir"
	err := os.Rename(oldName, newName)
	if err != nil {
		log.Fatal(err)
	}
}

文件操作

os.ReadFile()

读取文件

package main

import (
	"fmt"
	"os"
)

func main() {
	data, err := os.ReadFile("test.txt")
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(string(data)) // hello world
}

os.WriteFile()

写文件 

package main

import (
	"fmt"
	"io/fs"
	"os"
)

func main() {
	err := os.WriteFile("test.txt", []byte("hello world"), fs.ModeType)
	if err != nil {
		fmt.Println(err)
	}
}

os.Create()

创建文件

用Create()函数创建一个名为name的文件,默认采用模式0666。如果文件已存在,则它会被重置为空文件。如果成功,则返回的文件描述符对象可用于文件的读写。

package main

import (
	"fmt"
	"os"
)

func main() {
	fp, err := os.Create("./test.txt")
	if err != nil {
		fmt.Println("file create failed")
	}
	fmt.Printf("%T", fp) // *os.File
	defer fp.Close()
}

文件路径操作

filepath.Abs()

获取路径的绝对路径

package main

import (
	"fmt"
	"path/filepath"
)

func main() {
	f, _ := filepath.Abs("./search")
	fmt.Println(f) // D:\Project\test_go\test\search
}

filepath.Join()

路径拼接

package main

import (
	"fmt"
	"path/filepath"
)

func main() {
	f := filepath.Join("test", "search", "default.go")
	fmt.Println(f) // test\search\default.go
}

filepath.Base()

返回路径 basename

package main

import (
	"fmt"
	"path/filepath"
)

func main() {
	f := filepath.Base("D:\\Project\\test_go\\test\\search")
	fmt.Println(f) // search
}

filepath.Clean()

返回路径的简洁模式

package main

import (
	"fmt"
	"path/filepath"
)

func main() {
	f := filepath.Clean("./search/../data")
	fmt.Println(f) // search
}

filepath.Dir()

返回路径的上级目录

package main

import (
	"fmt"
	"path/filepath"
)

func main() {
	f := filepath.Dir("./search/default.go")
	fmt.Println(f) // search
}

filepath.Ext()

返回文件的扩展名

package main

import (
	"fmt"
	"path/filepath"
)

func main() {
	f := filepath.Ext("./search/default.go")
	fmt.Println(f) // .go
}

filepath.FromSlash()

路径使用系统兼容的路径连接符

package main

import (
	"fmt"
	"path/filepath"
)

func main() {
	f := filepath.FromSlash("./search/default.go")
	fmt.Println(f) // .\search\default.go
}

filepath.Split()

获取路径中的目录和文件

package main

import (
	"fmt"
	"path/filepath"
)

func main() {
	dir, file := filepath.Split("./search/default.go")
	fmt.Println(dir)  // ./search/
	fmt.Println(file) // default.go
}

filepath.Glob()

通配文件

package main

import (
	"fmt"
	"path/filepath"
)

func main() {
	files, _ := filepath.Glob("./search/*.go")
	for _, file := range files {
		fmt.Println(file)
	}
	// search\default.go
	// search\feed.go
	// search\match.go
	// search\search.go
}

filepath.IsAbs()

绝对路径判断

package main

import (
	"fmt"
	"path/filepath"
)

func main() {
	isAbs := filepath.IsAbs("./search/match.go")
	fmt.Println("isAbsDir:", isAbs) // isAbsDir: false
	abspath, _ := filepath.Abs("./search/match.go")
	fmt.Println(abspath) // D:\MyProject\Go\test\search\match.go
	isAbs = filepath.IsAbs("D:\\MyProject\\Go\\test\\search\\match.go")
	fmt.Println("isAbsDir:", isAbs) // isAbsDir: true

}

filepath.Walk()

目录遍历

package main

import (
	"fmt"
	"os"
	"path/filepath"
)

func main() {
	root := `./test`
	err := filepath.Walk(root, scan)
	if err != nil {
		fmt.Printf("filepath.Walk() return %v\n", err)
		//scaned dir: ./test
		//scaned dir: test\test
		//scaned dir: test\test\test
		//scaned file: test\test\test\test.txt
	}
}

func scan(path string, f os.FileInfo, err error) error {
	if f.IsDir() {
		fmt.Printf("scaned dir: %s\n", path)
	} else {
		fmt.Printf("scaned file: %s\n", path)
	}
	return nil
}

到此这篇关于Go目录文件路径操作的实现的文章就介绍到这了,更多相关Go目录文件路径操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言变量创建的五种方法

    Go语言变量创建的五种方法

    这篇文章主要介绍了Go语言五种变量创建的方法,本文给大家提到了匿名变量的优点,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2020-02-02
  • Go语言并发编程之控制并发数量实现实例

    Go语言并发编程之控制并发数量实现实例

    这篇文章主要为大家介绍了Go语言并发编程之控制并发数量实例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Go Excelize API源码阅读SetSheetViewOptions示例解析

    Go Excelize API源码阅读SetSheetViewOptions示例解析

    这篇文章主要为大家介绍了Go-Excelize API源码阅读SetSheetViewOptions示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Go语言实现动态开点线段树详解

    Go语言实现动态开点线段树详解

    线段树是一种用于高效处理区间查询和区间更新的数据结构,下面我们就来看看如何使用Go实现动态开点线段树的方式,感兴趣的可以了解下
    2025-02-02
  • 揭秘Go Json.Unmarshal精度丢失之谜

    揭秘Go Json.Unmarshal精度丢失之谜

    我们知道在json反序列化时是没有整型和浮点型的区别,数字都使用同一种类型,在go语言的类型中这种共同类型就是float64,下面我们就来探讨一下Json.Unmarshal精度丢失之谜吧
    2023-08-08
  • 详解Go语言中关于包导入必学的 8 个知识点

    详解Go语言中关于包导入必学的 8 个知识点

    这篇文章主要介绍了详解Go语言中关于包导入必学的 8 个知识点,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 基于Go和PHP语言实现爬楼梯算法的思路详解

    基于Go和PHP语言实现爬楼梯算法的思路详解

    这篇文章主要介绍了Go和PHP 实现爬楼梯算法,本文通过动态规划和斐波那契数列两种解决思路给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • golang获取网卡信息操作

    golang获取网卡信息操作

    这篇文章主要介绍了golang获取网卡信息操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • 从零开始学Golang的接口

    从零开始学Golang的接口

    本文主要介绍了从零开始学Golang的接口,原文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • golang API请求队列的实现

    golang API请求队列的实现

    本文主要介绍了golang API请求队列的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04

最新评论