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 //改变了文件的
gid
和
uid
。如果文件是一个符号链接,它改变的链接自己。如果出错,则会是*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 //创建一个新目录,该目录是利用路径&