go记录

取程序运行路径路径

golang,执行路径

1
2
3
4
5
6
7
8
9
10
11
12
import (
"path/filepath"
"strings"
)

func getCurrentDirectory() string {
dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
return ""
}
return strings.Replace(dir, "\\", "/", -1)
}

要注意用go run的方式启动时,该方法拿不到正确的路径,因为它帮我们编译到了临时目录里。

日志

via: https://my.oschina.net/robin3d/blog/1862755

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package main

import (
"log"
"os"
)

var logger *log.Logger

func main() {
file, err := os.OpenFile("test.log", os.O_APPEND|os.O_CREATE, 666)
if err != nil {
log.Fatalln("fail to create test.log file!")
}
defer file.Close()
logger = log.New(file, "", log.LstdFlags|log.Lshortfile) // 日志文件格式:log包含时间及文件行数
log.Println("输出日志到命令行终端")
logger.Println("将日志写入文件")

logger.SetFlags(log.LstdFlags | log.Lshortfile) // 设置日志格式

log.Panicln("在命令行终端输出panic,并中断程序执行")
logger.Panicln("在日志文件中写入panic,并中断程序执行")

log.Fatal("在命令行终端输出日志并执行os.exit(1)")
logger.Fatal("在日志文件中写入日志并执行os.exit(1)")
}

判断文件是否存在

1
2
3
4
5
6
7
8
9
10
func PathExists(path string) (bool, error) {
_, err := os.Stat(path)
if err == nil {
return true, nil
}
if os.IsNotExist(err) {
return false, nil
}
return false, err
}

在go中执行命令

via: https://stackoverflow.com/questions/6182369/exec-a-shell-command-in-go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package main

import (
"bytes"
"fmt"
"log"
"os/exec"
)

const ShellToUse = "bash"

func Shellout(command string) (error, string, string) {
var stdout bytes.Buffer
var stderr bytes.Buffer
cmd := exec.Command(ShellToUse, "-c", command)
cmd.Stdout = &stdout
cmd.Stderr = &stderr
err := cmd.Run()
return err, stdout.String(), stderr.String()
}

func main() {
err, out, errout := Shellout("ls -ltr")
if err != nil {
log.Printf("error: %v\n", err)
}
fmt.Println("--- stdout ---")
fmt.Println(out)
fmt.Println("--- stderr ---")
fmt.Println(errout)
}

直接输出到stdout上:

1
2
3
4
5
6
7
8
func Shellout(command string) (error) {
//var stdout bytes.Buffer
cmd := exec.Command(ShellToUse, "-c", command)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stdout
err := cmd.Run()
return err
}