环境变量

获取所有环境变量, 返回变量列表

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系统包的更多相关文章

  1. golang --os系统包详解

    环境变量 Environ 获取所有环境变量, 返回变量列表 func Environ() []string package main import ( "fmt" "os ...

  2. .Net程序员学用Oracle系列(29):PLSQL 之批量应用和系统包

    1.批量数据操作 1.1.批量生成数据 1.2.批量插入数据 2.批量生成脚本 3.生成数据字典 4.常见系统包 4.1.DBMS_OUTPUT 4.2.DBMS_RANDOM 4.3.其它系统包及常 ...

  3. Golang os/exec 实现

    os/exec 实现了golang调用shell或者其他OS中已存在的命令的方法. 本文主要是阅读内部实现后的一些总结. 如果要运行ls -rlt,代码如下: package main import ...

  4. golang 系统包自动填写插件

    Make sure $GOPATH/bin is in your $PATH (Windows: %GOPATH%\bin goes in your %PATH%). [保证你的golang环境正常] ...

  5. 關於mac os系統的一些快捷鍵和操作

    一.了解mac os 1.桌面的组成元素 2.认识“Dock栏” Dock是一个神奇的东西,可以把Dock理解为Windows的任务栏,在这个地方可以随意拖放你想常驻在你屏幕底部的应用. Dock在工 ...

  6. golang os.OpenFile

    os.O_WRONLY | os.O_CREATE | O_EXCL           [如果已经存在,则失败] os.O_WRONLY | os.O_CREATE                 ...

  7. golang os/exec 执行外部命令

    exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout,并且利用pipe连接i/o. func LookPath(file string) (st ...

  8. golang os包使用笔记

    zhangsan os.Stidn 标准输入 os.Stdout 标准输出 os.Stderr 标准错误输出

  9. Solaris 11配置IPS安装系统包(类似linux中的yum源)

    参考:http://blog.chinaunix.net/uid-8860-id-3777457.html 一. 概述: Solaris 11被称为第一个云操作系统,因此在很多方面体现了云系统的一些特 ...

随机推荐

  1. html 实体编码转换成原字符

    今天遇到件很恶心的事,某国外歌词网站提供的歌词在源文件里使用“&#数字;”格式的编码表示abcd....原来小菜我实在才疏学浅不知此为何物,于是特有的搜索引擎控,搜之.片刻得解,此乃html实 ...

  2. maven 学习---Maven Web应用

    本教程将教你如何管理使用Maven版本控制系统管理一个基于Web项目.在这里,将学习如何创建/构建/部署和运行Web应用程序: 创建Web应用程序 要创建一个简单的java web应用程序,我们将使用 ...

  3. SUSE12-SP2安装教程(虚拟机)

    创建虚拟机,安装系统,安装系统后的系统设置 创建虚拟机 将SUSE12-SP2镜像(大于3G)上传到虚拟机主机存储. 创建虚拟机创建虚拟机,CPU>=8核,内存>=16G(注:我这里仅演示 ...

  4. Mysql优化之6年工作经验总结

    我们究竟应该如何对MySQL数据库进行优化?下面我就从MySQL对硬件的选择.MySQL的安装.my.cnf的优化.MySQL如何进行架构设计及数据切分等方面来说明这个问题.   服务器物理硬件的优化 ...

  5. Placeholder_2:0 is both fed and fetched

    Placeholder_2:0 is both fed and fetched TensorFlow出现这个错误是因为网络的输入被原样输出,也就是说同一个东西既被输入网络,又被输出网络.

  6. P4677 山区建小学|区间dp

    P4677 山区建小学 题目描述 政府在某山区修建了一条道路,恰好穿越总共nn个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往.已知任意两个相邻的村庄之间的距离为di 为了提高山区 ...

  7. 201871010118-唐敬博《面向对象程序设计(java)》第十周学习总结

    博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ...

  8. Java8——jdk——java.time包

    public class TestLocalDateTime { //6.ZonedDate.ZonedTime.ZonedDateTime : 带时区的时间或日期 @Test public void ...

  9. 阿里云serverless使用笔记

    1.使用api网关服务,创建完api后,测试时,需要传“请求签名”,否则会报401 ‘Empty Signature’错误.相关文档<错误编码表,请求签名>.(错误信息放置与响应头的‘x- ...

  10. 高效Redis工具类

    一.引言 本篇博客以redis缓存为主.至于什么是redis缓存?还有没有其它的缓存?哪个缓存的性能会更好?这里就不一一做介绍了!(有兴趣的可以自己去百度一下) 在日常的开发中,我们或多或少(必须)的 ...