使用go命令可以定位到文件头和文件末
创新互联建站主要从事成都做网站、成都网站制作、成都外贸网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务民丰,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575
当go run 运行时会将文件转移到临时路径下,然后再进行编译和执行,分片0就是C:\Users\xxx\AppData\Local\Temp___go_build_main_go.exe;
go build编译执行时,那么分片0为执行文件的相对路径为(main.go)
fmt.Println(os.Args)
//output:[C:\Users\xxx\AppData\Local\Temp\___go_build_main_go.exe]
1
2
1
2
exec.LookPath()
根据传入的参数来从PATH中获取可执行文件的绝对路径(没有编译的)或者相对路径(编译后的);参数若带分割号就直接查询返回
func LookPath(file string) (string, error)
LookPath searches for an executable named file in the directories named by the
PATH environment variable. If file contains a slash, it is tried directly and the
PATH is not consulted. LookPath also uses PATHEXT environment variable to match a
suitable candidate. The result may be an absolute path or a path relative to the
current directory.
1
2
3
4
5
6
7
1
2
3
4
5
6
7
filepath.Abs()
根据传入的路径计算出绝对路径,如果传入的为相对路径,那么它会把当前路径拼接上
编译后返回的是真实的路径(D:\go_project\src\github.com\wzbwzt\studyGo\GetPath\main.exe)
未编译执行返回的是临时执行路径
(C:\Users\xxx\AppData\Local\Temp___go_build_main_go.exe)
本文主要介绍了Go语言中文件读写的相关操作。
文件是什么?
计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件。
os.Open() 函数能够打开一个文件,返回一个 *File 和一个 err 。对得到的文件实例调用 close() 方法能够关闭文件。
为了防止文件忘记关闭,我们通常使用defer注册文件关闭语句。
Read方法定义如下:
它接收一个字节切片,返回读取的字节数和可能的具体错误,读到文件末尾时会返回 0 和 io.EOF 。 举个例子:
使用for循环读取文件中的所有数据。
bufio是在file的基础上封装了一层API,支持更多的功能。
io/ioutil 包的 ReadFile 方法能够读取完整的文件,只需要将文件名作为参数传入。
os.OpenFile() 函数能够以指定模式打开文件,从而实现文件写入相关功能。
其中:
name :要打开的文件名 flag :打开文件的模式。 模式有以下几种:
perm :文件权限,一个八进制数。r(读)04,w(写)02,x(执行)01。
golang ioutil.WriteFile函数perm参数的用法
ioutil.WriteFile(..., perm os.FileMode)
刚开始接触golang的文件API的时候,总是纳闷为什么在创建文件的时候需要显示的指定文件的perm属性,难道不能从系统的umask里面获取吗?
实际上ioutil.WriteFile在创建新文件时,并不是直接使用参数perm的值,而是要和umask的值做合并的。把函数参数的值合并到当前umask的值,才是最终创建出来文件的perm属性。
例如
umask为空,所以ioutil.WriteFile的perm属性就是最后的文件属性
umask为0777,所以ioutil.WriteFile的perm属性全被disable掉了
umask为0000,所以ioutil.WriteFile的perm属性就是最后的文件属性
umask为0640,而ioutil.WriteFile的perm属性也是640,正好全部被关闭了,最后生成的文件没有任何属性。
即ioutil.WriteFile在写文件时,如果目标文件已经存在,那么目标文件的perm属性不会被改动,即此时ioutil.WriteFile的参数perm会被忽略。
注意一点就明白了,touch命令使用的是0666的属性,它并没有给X(executable)属性置值,所以不管在umask中对executable位是否置1,touch命令就不能生成一个具有executable的文件。
003-golang 调用外部命令
相关函数
exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout,并且利用pipe连接i/o.
func LookPath(file string) (string, error) //LookPath在环境变量中查找科执行二进制文件,如果file中包含一个斜杠,则直接根据绝对路径或者相对本目录的相对路径去查找
在用exec包调用的其他进程后如何关闭结束,可以使用context包的机制进行管理,context包的使用详见:
exec.CommandContext方发实现了context,通过context可以对exec启动的进程结束。
隐藏程序自身黑窗口的方法:go build -ldflags="-H windows"
隐藏子进程黑窗口的方法: