go实现文件的创建、编译及运行

之前在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))
}

你可能感兴趣的:(GO学习总结)