go里面os包的使用案例

1.获取所有的环境变量[os.Environ]

package  main

import (
    "fmt"
    "os"
    "strings"
)
func main(){
    envs:=os.Environ();
    for _,env:=range envs {
        cache:= strings.Split(env,"=");
        fmt.Printf("key=%v value=%v\n",cache[0],cache[1]);
    }
}

2.获取环境变量

package  main
import (
    "fmt"
    "os"
)
func main(){
    path:=os.Getenv("GOPATH");
    fmt.Println(path);
}

 3.设置环境

package  main

import "os"

func main(){
	os.Setenv("GOPATH","E/info");//使用SetEnv()来设置环境
}

 

 

文件信息

type FileInfo interface {
    Name() string       // 文件的名字(不含扩展名)
    Size() int64        // 普通文件返回值表示其大小;其他文件的返回值含义各系统不同
    Mode() FileMode     // 文件的模式位
    ModTime() time.Time // 文件的修改时间
    IsDir() bool        // 等价于Mode().IsDir()
    Sys() interface{}   // 底层数据来源(可以返回nil)
}

获取文件信息对象, 符号链接将跳转

func Stat(name string) (fi FileInfo, err error)

fi, _ := os.Stat("./cache.js")
 
fmt.Println(fi.Size())

获取文件信息对象, 符号链接不跳转

package main
 
import (
    "fmt"
    "os"
)
 
func main() {
    fi, _ := os.Lstat("./main.go")
 
    fmt.Println(fi.Size())
}

 

根据错误,判断 文件或目录是否存在

package main
 
import (
    "fmt"
    "os"
)
 
func main() {
    if _, err := os.Open("./empty.js"); err != nil {
        // false 不存在   true 存在
        emptyErr := os.IsExist(err)
        fmt.Println(emptyErr, "\n", err)
    }
}

IsExist 反义方法

package main
 
import (
    "fmt"
    "os"
)
 
func main() {
    if _, err := os.Open("./empty.js"); err != nil {
        // false 不存在   true 存在
        emptyErr := os.IsNotExist(err)
        fmt.Println(emptyErr, "\n", err)
    }
}

根据错误,判断是否为权限错误

package main
 
import (
    "fmt"
    "os"
)
 
func main() {
    file, _ := os.Open("cache.js")
    _, err := file.WriteString("// new info")
 
    if err != nil {
        fmt.Println(os.IsPermission(err))
    }
    defer file.Close()
}

 

文件/目录操作

属性操作

获取当前工作目录

func Getwd() (dir string, err error)

package main
 
import (
    "fmt"
    "os"
)
 
func main() {
    path, _ := os.Getwd()
    fmt.Println(path)
}

 

修改当前,工作目录

func Chdir(dir string) error

package main
 
import (
    "fmt"
    "os"
)
 
func main() {
    path1, _ := os.Getwd()
    fmt.Println(path1)
    os.Chdir("./../")
    path, _ := os.Getwd()
    fmt.Println(path)
 
}

 

增删改查

创建目录

func Mkdir(name string, perm FileMode) error
package  main
import (
    "fmt"
    "os"
)
func main(){
    if err:=os.Mkdir("info",os.ModeDir); err != nil {
        fmt.Println("error");
    }else{
        fmt.Println("success");
    }
}

 

递归创建目录

func MkdirAll(path string, perm FileMode) error

package  main

import (
    "fmt"
    "os"
)

func main(){
    if err:=os.MkdirAll("info/test",os.ModeDir);err !=nil {
        fmt.Println("error");
    }else{
        fmt.Println("success");
    }
}

移除文件或目录(单一文件)

func Remove(name string) error

package main
import (
    "fmt"
    "os"
)
func main() {
    if err := os.Remove("test"); err != nil {
        fmt.Println(err)
    } else {
        fmt.Println("success")
    }

}

递归删除文件或目录

func RemoveAll(path string) error

package main
import (
    "fmt"
    "os"
)
func main() {
    if err := os.RemoveAll("test01"); err != nil {
        fmt.Println(err)
    } else {
        fmt.Println("success")
    }

}

文件重名或移动

package main

import (
	"fmt"
	"os"
)
func main() {
	// 重命名
	err := os.Rename("test.txt", "test01.js")
	if err != nil {
		fmt.Println(err)
	}
	err = os.Mkdir("test", os.ModeDir)
	if err != nil {
		fmt.Println(err)
	}
	// 移动
	err = os.Rename("test01.js", "test/text01.txt")
	if err != nil {
		fmt.Println(err)
	}
}

文件/目录对象

打开文件/目录

创建文件, 如果文件存在,清空原文件

func Create(name string) (file *File, err error)

package main
import (
    "fmt"
    "os"
)
func main(){
    file,_:=os.Create("2.txt");
    fmt.Println(file.Name());
}

打开文件,获取文件对象, 以读取模式打开

Open打开一个文件用于读取。如果操作成功,返回的文件对象的方法可用于读取数据;对应的文件描述符具有O_RDONLY模式。如果出错,错误底层类型是*PathError。 
所以,Open()只能用于读取文件。

func Open(name string) (file *File, err error)

package main
 
import (
    "fmt"
    "os"
)
 
func main() {
 
    file, _ := os.Open("./new_file.js")
    fmt.Println(file.Name())
}

以指定模式,打开文件

func OpenFile(name string, flag int, perm FileMode) (file *File, err error)

package main
 
import (
    "fmt"
    "os"
)
 
func main() {
 
    file, _ := os.OpenFile("./new_file.js", os.O_RDONLY, os.ModeAppend)
    fmt.Println(file.Name())
}

文件对象读写操作

读取文件内容, 读入长度取决 容器切片长度

func (f *File) Read(b []byte) (n int, err error)

package main
import (
    "fmt"
    "os"
)
func main(){
    file,_:=os.Open("2.txt");
    bt:=make([]byte,100);
    file.Read(bt);
    defer  file.Close();
    fmt.Println(string(bt));
}

 

从某位置,读取文件内容

func (f *File) ReadAt(b []byte, off int64) (n int, err error)

package main
import (
    "fmt"
    "os"
)
func main() {
    bt := make([]byte, 100)
    file, _ := os.Open("test/text01.txt")
    file.ReadAt(bt, 2)
    fmt.Println(string(bt))
}

写入内容

func (f *File) Write(b []byte) (n int, err error)

package main
import (
    "fmt"
    "os"
)
func main() {
    file, err := os.OpenFile("test/text01.txt", os.O_RDWR, os.ModeAppend)
    if err != nil {
        fmt.Println("err: ", err)
        os.Exit(1)
    }
    defer file.Close()
    if n, err := file.Write([]byte("// new info")); err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(n)
    }
}

写入字符

func (f *File) WriteString(s string) (ret int, err error)

package main
 
import (
    "fmt"
    "os"
)
 
func main() {
 
    file, err := os.OpenFile("test/text01.txt", os.O_RDWR, os.ModeAppend)
    if err != nil {
        fmt.Println("err: ", err)
        os.Exit(1)
    }
 
    defer file.Close()
 
    if n, err := file.WriteString("// test info"); err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(n)
    }
 
}

 

参考信息[https://www.cnblogs.com/saryli/p/11691142.html]

 

posted on 2020-12-23 10:48  孤灯引路人  阅读(324)  评论(0编辑  收藏  举报

导航