环境变量
- Environ
获取所有环境变量, 返回变量列表
func Environ() []string
envs := os.Environ()
for _, env := range envs {
cache := strings.Split(env, "=")
fmt.Printf(`
key: %s
value: %s
`, cache[0], cache[1])
}
- Getenv
获取指定环境变量
func Getenv(key string) string
fmt.Println(os.Getenv("GOPATH"))
- Setenv
设置环境变量
func Setenv(key, value string) error
if err := os.Setenv("GOPATH", "./GO/bin"); err != nil{
fmt.Println(err)
}else{
fmt.Println("success")
}
- Clearenv
清除所有环境变量
os.Clearenv()
文件模式
const (
// 单字符是被String方法用于格式化的属性缩写。
ModeDir FileMode = 1 << (32 - 1 - iota) // d: 目录
ModeAppend // a: 只能写入,且只能写入到末尾
ModeExclusive // l: 用于执行
ModeTemporary // T: 临时文件(非备份文件)
ModeSymlink // L: 符号链接(不是快捷方式文件)
ModeDevice // D: 设备
ModeNamedPipe // p: 命名管道(FIFO)
ModeSocket // S: Unix域socket
ModeSetuid // u: 表示文件具有其创建者用户id权限
ModeSetgid // g: 表示文件具有其创建者组id的权限
ModeCharDevice // c: 字符设备,需已设置ModeDevice
ModeSticky // t: 只有root/创建者能删除/移动文件
// 覆盖所有类型位(用于通过&获取类型位),对普通文件,所有这些位都不应被设置
ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice
ModePerm FileMode = 0777 // 覆盖所有Unix权限位(用于通过&获取类型位)
)
文件信息
- FileInfo
type FileInfo interface {
Name() string // 文件的名字(不含扩展名)
Size() int64 // 普通文件返回值表示其大小;其他文件的返回值含义各系统不同
Mode() FileMode // 文件的模式位
ModTime() time.Time // 文件的修改时间
IsDir() bool // 等价于Mode().IsDir()
Sys() interface{} // 底层数据来源(可以返回nil)
}
- Stat
获取文件信息对象, 符号链接将跳转
func Stat(name string) (fi FileInfo, err error)
fi, _ := os.Stat("./cache.js")
fmt.Println(fi.Size())
- Lstat
获取文件信息对象, 符号链接不跳转
- IsExist
根据错误,判断 文件或目录是否存在
if _, err := os.Open("./empty.js"); err != nil {
// false 不存在 true 存在
emptyErr := os.IsExist(err)
fmt.Println(emptyErr, "\n", err)
}
- IsNotExist
IsExist 反义方法
- IsPermission
根据错误,判断是否为权限错误
file, _ := os.Open("./cache.js")
_, err := file.WriteString("// new info")
if err != nil {
fmt.Println(os.IsPermission(err))
}
文件/目录操作
属性操作
- Getwd
获取当前工作目录
func Getwd() (dir string, err error)
path, _ := os.Getwd()
fmt.Println(path)
- Chdir
修改当前,工作目录
func Chdir(dir string) error
os.Chdir("./../")
path, _ := os.Getwd()
fmt.Println(path)
- Chmod
修改文件的 FileMode
func Chmod(name string, mode FileMode) error
- Chtimes
修改文件的 访问时间和修改时间
func Chtimes(name string, atime time.Time, mtime time.Time) error
path := "./cache.js"
os.Chtimes(path, time.Now(), time.Now())
fi, _ := os.Stat(path)
fmt.Println(fi.ModTime())
增删改查
- Mkdir
创建目录
func Mkdir(name string, perm FileMode) error
if err := os.Mkdir("./static", os.ModeDir); err != nil{
fmt.Println(err)
}else{
fmt.Println("success")
}
- MkdirAll
递归创建目录
func MkdirAll(path string, perm FileMode) error
os.MkdirAll("./static/imgs/icon", os.ModeDir)
- Remove
移除文件或目录(单一文件)
func Remove(name string) error
if err := os.Remove("./static"); err != nil {
fmt.Println(err)
} else {
fmt.Println("success")
}
- RemoveAll
递归删除文件或目录
func RemoveAll(path string) error
if err := os.RemoveAll("./static"); err != nil {
fmt.Println(err)
} else {
fmt.Println("success")
}
- Rename
文件重名或移动
func Rename(oldpath, newpath string) error
// 重命名
err := os.Rename("./test.js", "./file.js")
// 移动
os.Rename("./file.js", "./warp/file.js")
- [Truncate](https://github.com/golang/go/blob/master/src/os/file_unix.go?name=release#251
修改文件大小
func Truncate(name string, size int64) error
path := "./cache.js"
fi, _ := os.Stat(path)
size := fi.Size()
fmt.Println(size)
// 截取长度
size = int64(float64(size) * .5)
os.Truncate(path, size)
fi, _ = os.Stat(path)
fmt.Println(fi.Size())
// 注意: 长度小于原文件时,文件内容将被截取
// 长度大于原文件时,超出部分将被无效字符填充
- SameFile
比较两个文件信息对象,是否指向同一文件
func SameFile(fi1, fi2 FileInfo) bool
path := "./cache.js"
fi_1, _ := os.Stat(path)
fi_2, _ := os.Stat(path)
fmt.Println(os.SameFile(fi_1, fi_2))
文件/目录对象
打开文件/目录
- Create
创建文件, 如果文件存在,清空原文件
func Create(name string) (file *File, err error)
file, _ := os.Create("./new_file.js")
fmt.Println(file.Name())
- Open
打开文件,获取文件对象, 以读取模式打开
func Open(name string) (file *File, err error)
file, _ := os.Open("./new_file.js")
fmt.Println(file.Name())
- OpenFile
以指定模式,打开文件
func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
file, _ := os.OpenFile("./new_file.js", os.O_RDONLY, os.ModeAppend)
fmt.Println(file.Name())
文件对象属性操纵
- Name
获取文件路径
func (f *File) Name() string
- Stat
获取文件信息对象
func (f *File) Stat() (fi FileInfo, err error)
- Chdir
将当前工作路径修改为文件对象目录, 文件对象必须为目录, 该接口不支持window
func (f *File) Chdir() error
- Chmod
修改文件模式
func (f *File) Chmod(mode FileMode) error
- Truncate
修改文件对象size
func (f *File) Truncate(size int64) error
文件对象读写操作
- Read
读取文件内容, 读入长度取决 容器切片长度
func (f *File) Read(b []byte) (n int, err error)
bt := make([]byte, 100)
file, _ := os.Open("./source.js")
file.Read(bt)
fmt.Println(string(bt))
- ReadAt
从某位置,读取文件内容
func (f *File) ReadAt(b []byte, off int64) (n int, err error)
bt := make([]byte, 100)
file, _ := os.Open("./source.js")
file.ReadAt(bt, 20)
fmt.Println(string(bt))
- Write
写入内容
func (f *File) Write(b []byte) (n int, err error)
file, _ := os.OpenFile("./source.js", os.O_RDWR, os.ModeAppend)
defer file.Close()
if n, err := file.Write([]byte("// new info")); err != nil {
fmt.Println(err)
} else {
fmt.Println(n)
}
- WriteString
写入字符
func (f *File) WriteString(s string) (ret int, err error)
file, _ := os.OpenFile("./source.js", os.O_RDWR, os.ModeAppend)
defer file.Close()
if n, err := file.WriteString("// new info"); err != nil {
fmt.Println(err)
} else {
fmt.Println(n)
}
- WriteAt
从指定位置,写入
func (f *File) WriteAt(b []byte, off int64) (n int, err error)
file, _ := os.OpenFile("./source.js", os.O_RDWR, os.ModeAppend)
fi, _ := file.Stat()
size := fi.Size()
defer file.Close()
if n, err := file.WriteAt([]byte("\n// new info"), size); err != nil {
fmt.Println(err)
} else {
fmt.Println(n)
}
- Seek
设置下次读写位置
func (f *File) Seek(offset int64, whence int) (ret int64, err error)
- Close
关闭文件
func (f *File) Close() error