os

114 阅读2分钟

image.png

image.png image.png

2 image.png 返回切片类型 ReadFile读取指定文件并返回的内容 。成功调用返回错= = nil,不是错= = EOF。因为ReadFile读取整个文件,它不治疗的EOF解读为一个错误报告。

os.Stdout.Write(data)

2)Stdout打开的文件,标准输出文件描述符 image.png 1 Stdin、2 Stdout和3 Stderr是打开的文件,指向1标准输入、2标准输出和3标准错误 文件描述符。

请注意,Go运行时会为死机和崩溃写入标准错误;关闭Stderr可能会导致这些消息转到其他地方,可能会转到稍后打开的文件。

3)Write() 传入参数是一个切片和ReadFile互相使用 image.png 注意是从data写入"testdata/hello文件中

Write将len(b)个字节从b写入文件。它返回写入的字节数和一个错误(如果有的话)。当n!=时,写入返回非零错误len(b)。

相关练习:

package main

import (
	"log"
	"os"
)

func main() {
	//也可以这样
	// file := "D:/text.txt"
	// data, err := os.ReadFile(file)

	//这里是看官网的,因为老师的版本是19年发布的,现在23,所以和filedemo02中有很大的不同
	//中文版的标准库无os.ReadFile,官网才有
	//func ReadFile(name string) ([]byte, error)
	//在filedemo04中也能用,但要注意是在os.O_RDWR能读又能写的情况下
	data, err := os.ReadFile("D:/text.txt")
	if err != nil {
		log.Fatal(err) //进化版fmt.Println("Open file err=", err)
	}
	//这里能直接输出全部的三行内容,即使最后一行末尾没换行(回车)也照样能输出
	//filedemo02就不行而且还复杂,所以计算机得不断学习
	os.Stdout.Write(data) //想用这个方法得用到切片,
	//[]byteas []byte value in argument to os.Stdout.Write
	/*filedemo02进化版,
	for {
		str, err := reader.ReadString('\n') //注意是单引号,关键 读到一个换行就结束
		if err == io.EOF {                  // io.EOF表示文件的末尾
			break
		}
		//关键 读到一个换行就结束,
		//所以在text.txt文件中的最后一行的末尾在给他一个回车表示换行了,否则最后一行的内容不输出
		//输出内容(三行全在)
		fmt.Print(str)

	}
	*/
}

3:判断文件是否存在

os.Stat()

os.IsNotExist()旧方法--新方法得用errors.Is()

image.png

image.png

image.png

4.遍历os.Args切片,就可以得到所有的命令行输入参数值

package main

import (
	"fmt"
	"os"
)

func main() {
	fmt.Println("命令行的参数有", len(os.Args))
	//遍历os.Args切片,就可以得到所有的命令行输入参数值
	for i, v := range os.Args {
		fmt.Printf("args[%v]=%v\n", i, v)
	}
}

//在cmd命令行中输入这些,写完一个就回车。
//一开始没换行,已经go build了一个test.exe所以删掉再重来就好,还是不行就多试几次
//go build -o test.exe main.go

//除了第一个参数(以后版本可能会改先不管他),后面的可以乱设,无影响记得空格
//test.exe tom D:/aaa/bbb/init.log 909

/*cmd中结果,直接在vscode上不行
命令行的参数有 4
args[0]=test.exe
args[1]=tom
args[2]=D:/aaa/bbb/init.log
args[3]=909
*/

image.png