golang中os包用法

本文介绍了Golang中的os包,包括Chdir、Getwd、Chmod、Chown、Chtimes等函数,用于目录切换、文件权限修改、文件属主变更、文件时间戳更新等操作。同时讲解了环境变量、系统退出、符号链接、临时目录创建等功能,以及File类型的使用,如Create、OpenFile等。还涵盖了文件I/O、目录遍历和文件信息获取等操作。
摘要由CSDN通过智能技术生成

os包中实现了平台无关的接口,设计向Unix风格,但是错误处理是go风格,当os包使用时,如果失败之后返回错误类型而不是错误数量.

os包中函数设计方式和Unix类似,下面来看一下.

func Chdir(dir string) error   //chdir将当前工作目录更改为dir目录.

func Getwd() (dir string, err error)    //获取当前目录,类似linux中的pwd

func Chmod(name string, mode FileMode) error     //更改文件的权限(读写执行,分为三类:all-group-owner)
func Chown(name string, uid, gid int) error  //更改文件拥有者owner
func Chtimes(name string, atime time.Time, mtime time.Time) error    //更改文件的访问时间和修改时间,atime表示访问时间,mtime表示更改时间
func Clearenv()    //清除所有环境变量(慎用
func Environ() []string  //返回所有环境变量
func Exit(code int)     //系统退出,并返回code,其中0表示执行成功并退出,非0表示错误并退出,其中执行Exit后程序会直接退出,defer函数不会执行.

func Expand(s string, mapping func(string) string) string   //Expand用mapping 函数指定的规则替换字符串中的${var}或者$var(注:变量之前必须有$符号)。比如,os.ExpandEnv(s)等效于os.Expand(s, os.Getenv)。

package main

import (
	"fmt"
	"os"
)

func main() {
	mapping := func(key string) string {
		m := make(map[string]string)
		m = map[string]string{
			"world": "kitty",
			"hello": "hi",
		}
		if m[key] != "" {
			return m[key]
		}
		return key
	}
	s := "hello,world"            //  hello,world,由于hello world之前没有$符号,则无法利用map规则进行转换
	s1 := "$hello,$world $finish" //  hi,kitty finish,finish没有在map规则中,所以还是返回原来的值
	fmt.Println(os.Expand(s, mapping))
	fmt.Println(os.Expand(s1, mapping))

}

func ExpandEnv(s string) string  //ExpandEnv根据当前环境变量的值来替换字符串中的${var}或者$var。如果引用变量没有定义,则用空字符串替换。

func main() {
	s := "hello $GOROOT"
	fmt.Println(os.ExpandEnv(s)) // hello /home/work/software/go,$GOROOT替换为环境变量的值,而h没有环境变量可以替换,返回空字符串
}

func Getenv(key string) string  //获取系统key的环境变量,如果没有环境变量就返回空

  fmt.Println(os.Getenv("GOROOT")) // /home/software/go

func Geteuid() int  //获取调用者用户id

func Getgid() int   //获取调用者的组id

fmt.Println(os.Getgid()) //  1000

func Getgroups() ([]int, error)  //返回调用者属于的group,其和chown配合使用,改变文件属于的group.

func main() {

	fmt.Println(os.Getgroups())     //获取调用者属于的组  [4 24 27 30 46 108 124 1000]
	fmt.Println(os.Getgid())       //获取调用者当前所在的组 1000
	fmt.Println(os.Chown("tmp.txt", 1000, 46))  //更改文件所在的组
}

func Getpagesize() int   //获取底层系统内存页的数量
func Getpid() int    //获取进程id
func Getppid() int             //获取调用者进程父id

func Hostname() (name string, err error)    //获取主机名
func IsExist(err error) bool          //返回一个布尔值,它指明 err错误是否报告了一个文件或者目录已经存在。它被ErrExist和其它系统调用满足。

func IsNotExist(err error) bool     //返回一个布尔值,它指明 err错误是否报告了一个文件或者目录不存在。它被ErrNotExist 和其它系统调用满足。
func IsPathSeparator(c uint8) bool         //判断c是否是一个路径分割符号,是的话返回true,否则返回false

fmt.Println(os.IsPathSeparator('/')) //true
fmt.Println(os.IsPathSeparator('|')) //false

func IsPermission(err error) bool   //判定 err错误是否是权限错误。它被ErrPermission 和其它系统调用满足。
func Lchown(name string, uid, gid int) error   //改变了文件的 giduid。如果文件是一个符号链接,它改变的链接自己。如果出错,则会是*PathError类型。
func Link(oldname, newname string) error       //创建一个从oldname指向newname的 硬连接,对一个进行操作,则另外一个也会被修改.
func Mkdir(name string, perm FileMode) error //创建一个新目录,该目录具有FileMode权限, 当创建一个已经存在的目录时会报错

func main() {
	var path string
	if os.IsPathSeparator('\\') {
		path = "\\"
	} else {
		path = "/"
	}
	pwd, _ := os.Getwd()
	err := os.Mkdir(pwd+path+"tmp", os.ModePerm)
	if err != nil {
		fmt.Println(err)  
	}
}


func MkdirAll(path string, perm FileMode) error //创建一个新目录,该目录是利用路径&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值