之前在go实现文件的创建、删除和读取中介绍了Go包提供的操作文件的一些函数,现在用一个例子来完整介绍。内容包括文件夹的创建、文件的创建、文件内容的写入、编译以及运行等操作。
package main
import (
"fmt"
"io/ioutil"
"os"
"os/exec"
)
func main() {
//createDir("","csdn")
//createFile("helloWorld.go")
//compileFile("helloWorld.exe","helloWorld.go")
/*err := deleteFile("helloWorld.exe")
if err != nil {
fmt.Println("failed to delete file, err:", err)
}*/
/*err := deleteDir("csdn")
if err != nil {
fmt.Println("failed to delete dir, err:", err)
}*/
runExe("helloWorld.exe")
}
func createDir(dir, prefix string) {
// 如果第一个参数为空,Windows下默认会在C:\Users\dell\AppData\Local\Temp\ 目录下生成临时文件夹
// Linux下会在tmp\目录下创建临时文件夹
tmp, err := ioutil.TempDir(dir, prefix)
if err != nil {
fmt.Println("failed to create temp dir, err:", err)
return
}
fmt.Println(tmp)
}
func createFile(filename string) {
const source = `package main
import (
"fmt"
)
func main() {
fmt.Println("hello world")
}
`
f, err := os.Create(filename)
if err != nil {
fmt.Println("failed to create file, err:", err)
return
}
defer f.Close()
_, err = f.Write([]byte(source))
if err != nil {
fmt.Println("write error:", err)
}
}
// exe parameter define compiled filename
// src parameter define source filename
func compileFile(exe, src string) {
o, err := exec.Command("go", "build", "-o", exe, src).CombinedOutput()
if err != nil {
fmt.Println("failed to exec command, err:", err)
return
}
fmt.Println(string(o))
}
func deleteFile(filename string) error {
return os.Remove(filename)
}
func deleteDir(dir string) error {
return os.RemoveAll(dir)
}
func runExe(filename string) {
out, err := exec.Command(filename).CombinedOutput()
if err != nil {
fmt.Println("failed to combined output, err:", err)
return
}
fmt.Println("combined out:", string(out))
}