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 mod 使用旧版本 版本号指定方式

    go mod 使用旧版本 版本号指定方式

    这篇文章主要介绍了go mod 使用旧版本 版本号指定方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • go mod 安装依赖 unkown revision问题的解决方案

    go mod 安装依赖 unkown revision问题的解决方案

    这篇文章主要介绍了go mod 安装依赖 unkown revision问题的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • golang类型推断与隐式类型转换

    golang类型推断与隐式类型转换

    这篇文章主要介绍了golang类型推断与隐式类型转换,golang类型推断可以省略类型,像写动态语言代码一样,让编程变得更加简单,同时也保留了静态类型的安全性
    2022-06-06
  • gin框架Context如何获取Get Query Param函数数据

    gin框架Context如何获取Get Query Param函数数据

    这篇文章主要为大家介绍了gin框架Context Get Query Param函数获取数据,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Go channel实现批量读取数据

    Go channel实现批量读取数据

    Go中的 channel 其实并没有提供批量读取数据的方法,需要我们自己实现一个,使用本文就来为大家大家介绍一下如何通过Go channel实现批量读取数据吧
    2023-12-12
  • Go语言利用heap实现优先级队列

    Go语言利用heap实现优先级队列

    这篇文章主要为大家详细介绍了Go语言中heap的使用以及如何利用heap实现优先级队列的相关资料,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-05-05
  • GO的基础知识扫盲注意事项

    GO的基础知识扫盲注意事项

    这篇文章主要介绍了GO的基础知识注意事项,本文是GO语言小白的扫盲文,主要讲解了go语言的基本知识,GO程序目录结构,GO程序包的导入与别名运用,GO内置关键字,GO注释方法需要的朋友可以参考下
    2022-12-12
  • Golang Copier入门到入坑探究

    Golang Copier入门到入坑探究

    这篇文章主要为大家介绍了Golang Copier入门到入坑探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 手把手带你走进Go语言之循环语句

    手把手带你走进Go语言之循环语句

    在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件,本文给大家介绍的非常详细,跟着小编往下看吧
    2021-09-09
  • Golang中Set类型的实现方法示例详解

    Golang中Set类型的实现方法示例详解

    这篇文章主要给大家介绍了关于Golang中Set类型实现的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09

最新评论