golang --os系统包详解
环境变量
获取所有环境变量, 返回变量列表
func Environ() []string
package main import (
"fmt"
"os"
"strings"
) func main() {
envs := os.Environ()
for _, env := range envs {
cache := strings.Split(env, "=")
fmt.Printf(`
key: %s value: %s
`, cache[0], cache[1])
}
}
获取指定环境变量
func Getenv(key string) string
package main import (
"fmt"
"os"
) func main() {
fmt.Println(os.Getenv("GOPATH"))
}
设置环境变量
func Setenv(key, value string) error
package main import (
"fmt"
"os"
) func main() {
fmt.Println(os.Getenv("GOPATH")) if err := os.Setenv("GOPATH", "./GO/bin"); err != nil {
fmt.Println(err)
} else {
fmt.Println("success")
}
}
清除所有环境变量
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权限位(用于通过&获取类型位)
)
文件信息
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) }
修改文件的 FileMode
func Chmod(name string, mode FileMode) error
修改文件的 访问时间和修改时间
func Chtimes(name string, atime time.Time, mtime time.Time) error
package main import (
"fmt"
"os"
"time"
) func main() {
fmt.Println(os.Getwd()) path := "test.txt"
os.Chtimes(path, time.Now(), time.Now()) fi, _ := os.Stat(path)
fmt.Println(fi.ModTime()) }
增删改查
创建目录
func Mkdir(name string, perm FileMode) error
package main import (
"fmt"
"os"
) func main() {
if err := os.Mkdir("test", os.ModeDir); err != nil {
fmt.Println(err)
} else {
fmt.Println("success")
} }
递归创建目录
func MkdirAll(path string, perm FileMode) error
package main import (
"fmt"
"os"
) func main() {
if err := os.MkdirAll("test01/test", os.ModeDir); err != nil {
fmt.Println(err)
} 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")
} }
文件重名或移动
func Rename(oldpath, newpath string) error
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 Truncate(name string, size int64) error
package main import (
"fmt"
"os"
) func main() { path := "test/text01.txt"
fi, err := os.Stat(path)
if err != nil {
fmt.Println(err)
os.Exit(1)
} size := fi.Size()
fmt.Println(size) // 截取长度
size = int64(float64(size) * 0.5) os.Truncate(path, size) fi, _ = os.Stat(path) fmt.Println(fi.Size())
}
// 注意: 长度小于原文件时,文件内容将被截取 // 长度大于原文件时,超出部分将被无效字符填充
比较两个文件信息对象,是否指向同一文件
func SameFile(fi1, fi2 FileInfo) bool
package main import (
"fmt"
"os"
) func main() { path := "test/text01.txt" fi_1, _ := os.Stat(path)
fi_2, _ := os.Stat(path) fmt.Println(os.SameFile(fi_1, fi_2))
}
文件/目录对象
打开文件/目录
创建文件, 如果文件存在,清空原文件
func Create(name string) (file *File, err error)
import (
"fmt"
"os"
) func main() { file, _ := os.Create("./new_file.js")
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) Name() string
获取文件信息对象
func (f *File) Stat() (fi FileInfo, err error)
将当前工作路径修改为文件对象目录, 文件对象必须为目录, 该接口不支持window
func (f *File) Chdir() error
修改文件模式
func (f *File) Chmod(mode FileMode) error
修改文件对象size
func (f *File) Truncate(size int64) error
文件对象读写操作
读取文件内容, 读入长度取决 容器切片长度
func (f *File) Read(b []byte) (n int, err error)
package main import (
"fmt"
"os"
) func main() { bt := make([]byte, 10)
file, _ := os.Open("./new_file.js") 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)
} }
从指定位置,写入
func (f *File) WriteAt(b []byte, off int64) (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.WriteAt([]byte(" append "), 5); err != nil {
fmt.Println(err)
} else {
fmt.Println(n)
} }
设置下次读写位置
func (f *File) Seek(offset int64, whence int) (ret int64, err error)
package main import (
"fmt"
"os"
) func main() { f, err := os.OpenFile("test/text01.txt", os.O_RDWR, os.ModeAppend)
if err != nil {
fmt.Println("err: ", err)
os.Exit(1)
} defer f.Close() f.Seek(2, 0)
buffer := make([]byte, 5)
// Read 后文件指针也会偏移 n, err := f.Read(buffer)
if err != nil {
fmt.Println(nil)
return
}
fmt.Printf("n is %d, buffer content is : %s\n", n, buffer)
// 获取文件指针当前位置
cur_offset, _ := f.Seek(0, os.SEEK_CUR)
fmt.Printf("current offset is %d\n", cur_offset) }
关闭文件
func (f *File) Close() error
golang --os系统包详解的更多相关文章
- golang --os系统包
环境变量 Environ 获取所有环境变量, 返回变量列表 func Environ() []string package main import ( "fmt" "os ...
- Golang官方log包详解
Golang官方log包详解 以下全是代码, 详解在注释中, 请从头到尾看 // Copyright 2009 The Go Authors. All rights reserved. // Use ...
- (转)python之os,sys模块详解
python之sys模块详解 原文:http://www.cnblogs.com/cherishry/p/5725184.html sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和 ...
- 小白的Python之路 day5 os,sys模块详解
os模块详解 1.作用: 提供对操作系统调用的接口 2.常用方法: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径os.chdir("dirname" ...
- 转载的:Python os 和 os.path模块详解
os.getcwd()获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os.curdi ...
- os.environ的详解
我们想要用Python获得一些有关系统的各种信息的时候就不得不想到os的environ,那这里面都具体包含了那些内容呢? 简介 对于官方的解释,environ是一个字符串所对应环境的映像对象.这是什么 ...
- golang(11) 反射用法详解
原文链接:http://www.limerence2017.com/2019/10/14/golang16/ 反射是什么 反射其实就是通过变量动态获取其值和类型的一种技术,有些语言是支持反射的比如py ...
- iTerm2终端工具在Mac OS上使用详解
一.概述 因个人工作需要,使用终端工具进行运维和开发工作,但是Mac OS 自带的终端工具使用堡垒机登录配置不了,而且使用CRT等终端工具每次登录堡垒机都需要配置密码,操作起来很麻烦.一直想找一款终端 ...
- 【GoLang】GoLang fmt 占位符详解
golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf. # 定义示例类型和变量 type Human struct { Name string } var peo ...
随机推荐
- 用实力燃爆暑期丨i春秋渗透测试工程师线下就业班开课了!
i春秋&赛虎暑期渗透测试工程师线下就业班开课了! 本期开班地点:北京,面授脱产:四个月. 如果这次没来得及报名的同学也可以选择9月份广州的班次,具体开班时间请咨询谢老师:18513200565 ...
- elasticsearch7 配置篇
学习了这么多,终于开始搭建生产环境了,这一篇主要讲解配置项,以及支持中文分词的ik安装,集群的搭建. 配置项确实挺多的,但把几个常用配置熟悉就好,而且就像elasticsearch官方文档所说,不存在 ...
- JMETER 使用随机变量
使用场景 在发起流程时,我们需要模拟实际情况,不同的用户可以产生不一样数量的流程实例,因此我们可以使用随机变量还进行模拟. 随机变量实例 1.添加一个循环计数器 2.添加一个循环 循环次数是根据随机变 ...
- Python列表操作与深浅拷贝(6)——列表索引、查询、修改、扩展
列表list定义 L1 = [] L2 = [1,2,'abc'] L3 = list() L4 = list(range(5)) L5 = [1,'abc',True,None,[4,5,'abc' ...
- Linux---基本目录与文件命令
一.目录 1.显示工作目录命令pwd 2.改变工作目录命令cd 3.创建目录命令mkdir 二.文件 1.创建空文件命令touch 2.显示文件列表ls 3.复制文件或目录命令cp 4.删除文件或目录 ...
- python 正则表达式提取返回内容
import re re.findall(' <input name="address_id" type="hidden" value="(.* ...
- opencv鼠标事件
#include <opencv2\opencv.hpp> using namespace cv; struct mouse_para { cv::Mat org; cv::Mat img ...
- maven介绍(一)
一.什么是maven Maven 翻译过来就是专家,其官网为: http://maven.apache.org/ Maven使用POM (Project Object Model)项目对象模型,就是通 ...
- ASP.NET CoreMVC 中的视图
ASP.NET Core MVC 中的视图 MVC 中的视图 用于显示Controller提供给它的 Model 的业务数据. 视图是带有嵌入 Razor 标记的 HTML 模板. 如果编程语言是 C ...
- ASP.NET Core Windows 环境配置
ASP.NET Core 是对 ASP.NET 有重大意义的一次重新设计.本章节我们将介绍 ASP.NET Core 中的一些新的概念和它们是如何帮助我们开发现代化的 Web 应用程序 尽管 ASP. ...