Go语言学习之旅--文件OS
Posted 赵jc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言学习之旅--文件OS相关的知识,希望对你有一定的参考价值。
Go语言学习之旅--文件
博客根据B站《golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货》视频整理的,如有错误请大家评论指正!
os库
OS文件、目录操作
package main
import (
"fmt"
"os"
)
// 创建文件
func createFile()
f, err := os.Create("test.txt")
if err != nil
fmt.Printf("err: %v\\n", err)
else
fmt.Printf("f: %v\\n", f)
// 创建目录
func createDir()
// 创建单个目录
/* err := os.Mkdir("test", os.ModePerm)
if err != nil
fmt.Printf("err: %v\\n", err)
*/
err := os.MkdirAll("test/a/b", os.ModePerm)
if err != nil
fmt.Printf("err: %v\\n", err)
// 删除目录
func removeDir()
/* err := os.Remove("test.txt")
if err != nil
fmt.Printf("err: %v\\n", err)
*/
err := os.RemoveAll("test")
if err != nil
fmt.Printf("err: %v\\n", err)
// 获得工作目录
func getWd()
dir, err := os.Getwd()
if err != nil
fmt.Printf("err: %v\\n", err)
else
fmt.Printf("dir: %v\\n", dir)
// 修改工作目录
func chWd()
err := os.Chdir("d:/")
if err != nil
fmt.Printf("err: %v\\n", err)
fmt.Println(os.Getwd())
// 获得临时目录
func getTemp()
s := os.TempDir()
fmt.Printf("s: %v\\n", s)
// 重命名文件
func renameFile()
err := os.Rename("test.txt", "test2.txt")
if err != nil
fmt.Printf("err: %v\\n", err)
// 读文件
func readFile()
b, err := os.ReadFile("test2.txt")
if err != nil
fmt.Printf("err: %v\\n", err)
else
fmt.Printf("b: %v\\n", string(b[:]))
// 写文件
func writeFile()
s := "hello world"
os.WriteFile("test2.txt", []byte(s), os.ModePerm)
func main()
// createFile()
// createDir()
// removeDir()
// removeDir()
// getWd()
// chWd()
// renameFile()
// readFile()
// writeFile()
// getTemp()
File文件读操作
package main
import (
"fmt"
"os"
)
// 打开关闭文件
func openCloseFile()
// 只能读
f, _ := os.Open("a.txt")
fmt.Printf("f.Name(): %v\\n", f.Name())
// 根据第二个参数 可以读写或者创建
f2, _ := os.OpenFile("a1.txt", os.O_RDWR|os.O_CREATE, 0755)
fmt.Printf("f2.Name(): %v\\n", f2.Name())
err := f.Close()
fmt.Printf("err: %v\\n", err)
err2 := f2.Close()
fmt.Printf("err2: %v\\n", err2)
// 创建文件
func createFile()
// 等价于:OpenFile(name, O_RDWF|O_CREATE|O_TRUNK, 0666)
f, _ := os.Create("a2.txt")
fmt.Printf("f.Name(): %v\\n", f.Name())
// 第一个参数 目录默认:Temp 第二个参数 文件名前缀
f2, _ := os.CreateTemp("", "temp")
fmt.Printf("f2.Name(): %v\\n", f2.Name())
// 读操作
func readOps()
// 循环读取
/* f, _ := os.Open("a.txt")
for
buf := make([]byte, 6)
n, err := f.Read(buf)
fmt.Printf("string(buf): %v\\n", string(buf))
fmt.Printf("n: %v\\n", n)
if err == io.EOF
break
f.Close() */
/* buf := make([]byte, 10)
f2, _ := os.Open("a.txt")
// 从5开始读10个字节
n, _ := f2.ReadAt(buf, 5)
fmt.Printf("n: %v\\n", n)
fmt.Printf("string(buf): %v\\n", string(buf))
f2.Close() */
// 测试 a目录下有b和c目录
/* f, _ := os.Open("a")
de, _ := f.ReadDir(-1)
for _, v := range de
fmt.Printf("v.IsDir(): %v\\n", v.IsDir())
fmt.Printf("v.Name(): %v\\n", v.Name())
*/
// 定位
f, _ := os.Open("a.txt")
f.Seek(3, 0)
buf := make([]byte, 10)
n, _ := f.Read(buf)
fmt.Printf("n: %v\\n", n)
fmt.Printf("string(buf): %v\\n", string(buf))
f.Close()
func main()
// openCloseFile()
// createFile()
readOps()
File文件写操作
package main
import (
"os"
)
// 写字节数组
func write()
f, _ := os.OpenFile("a.txt", os.O_RDWR|os.O_APPEND, 0775)
f.Write([]byte("hello golang"))
f.Close()
// 写字符串
func writeString()
f, _ := os.OpenFile("a.txt", os.O_RDWR|os.O_TRUNC, 0775)
f.WriteString("hello world...")
f.Close()
// 随机写
func writeAt()
f, _ := os.OpenFile("a.txt", os.O_RDWR, 0775)
f.WriteAt([]byte("aaa"), 3)
f.Close()
func main()
// write()
// writeString()
writeAt()
os包进程相关操作
package main
import (
"fmt"
"os"
"time"
)
func main()
// 获得当前正在运行的进程id
fmt.Printf("os.Getegid(): %v\\n", os.Getegid())
// 父id
fmt.Printf("os.Getegid(): %v\\n", os.Getegid())
// 设置新进程的属性
attr := &os.ProcAttr
// files指定新进程继承的活动文件对象
// 前三个分别为,标准输入、标准输出、标准错误输出
Files: []*os.Fileos.Stdin, os.Stdout, os.Stderr,
// 新进程的环境变量
Env: os.Environ(),
// 开始一个新进程
p, err := os.StartProcess("c:\\\\windows\\\\system32\\\\notepad.exe", []string"c:\\\\windows\\\\system32\\\\notepad.exe", "d:\\\\a.txt", attr)
if err != nil
fmt.Println(err)
fmt.Println(p)
fmt.Println("进程ID:", p.Pid)
// 通过进程ID查找进程
p2, _ := os.FindProcess(p.Pid)
fmt.Println(p2)
// 等待10秒,执行函数
time.AfterFunc(time.Second*10, func()
// 向p进程发出退出信号
p.Signal(os.Kill)
)
// 等待进程p的退出,返回进程状态
ps, _ := p.Wait()
fmt.Println(ps.String())
os包和环境相关的方法
package main
import (
"fmt"
"os"
)
func main()
// 获得所有环境变量
s := os.Environ()
fmt.Printf("s: %v\\n", s)
// 获得某个环境变量
s2 := os.Getenv("GOPATH")
fmt.Printf("s2: %v\\n", s2)
// 设置环境变量
os.Setenv("env1", "env1")
s2 = os.Getenv("aaa")
fmt.Printf("s2: %v\\n", s2)
fmt.Println("--------------")
// 查找
s3, b := os.LookupEnv("env")
fmt.Printf("b: %v\\n", b)
fmt.Printf("s3: %v\\n", s3)
// 替换
os.Setenv("NAME", "gopher")
os.Setenv("BURROW", "/usr/gopher")
os.ExpandEnv("$NAME lives in $BURROW.")
// 清空环境变量
// os.Clearenv()
以上是关于Go语言学习之旅--文件OS的主要内容,如果未能解决你的问题,请参考以下文章