Golang标准库
1. fmt.Printf
通用占位符:
%v
以默认值打印%+v
以默认值打印,输出结构体会输出字段名%#v
结果为:%T+%+v%T
输出值类型%%
打印%本身
打印字符串%s
输出字符串表示%q
双引号围绕字符串%x
输出十六进制,小写字母,每字节两个字符%X
输出十六进制,大写字母,每字节两个字符
打印指针
%p
打印整数%b
二进制%d
十进制%o
八进制%x
十六进制小写%X
十六进制大写%c
打印unicode%q
go语法字符字面值%U
对应的unicode值
打印浮点数%e
科学计数法e%E
科学计数法E%f
有小数部分,无指数%F
=%f
%g
%e|%f
取更简洁的输出%G
%E|%F
取更简洁的输出
精度输出%a.bf
a代表多变的宽度,b为精度,如果没有点,则a是整体宽度
占位符%+v
占位符,值为结构体时,输出结构体字段名%+q
只输出ascii编码的字符,非ascii用unicode表示%#x
给打印的16进制加0x%#q
用反引号打印字符串%#U
若是可打印的字符,则将其打印%#p
若是打印内存地址,则去掉0x
2. os/exec
exec.Command返回一个cmd对象,命令的执行分为三种情况:
- 只执行命令
cmd := exec.Command("ls", "-l", "/var/log/")
err := cmd.Run()
- 执行命令并获取结果(不区分stdout,stderr)
cmd:=exec.Command("ls")
out,err:=cmd.CombinedOutput()
//ls -l /var/log/*.log对应的shell命令
//ls -l "/var/log/*.log"
- 执行命令并获取结果(区分stdout,stderr)
cmd := exec.Command("ls", "-l", "\"/var/log/*.log\"")
var stdout, stderr bytes.Buffer
cmd.Stdout = &stdout // 标准输出
cmd.Stderr = &stderr // 标准错误
- 管道
将上一条命令的执行输出结果,做为下一条命令的参数
c1 := exec.Command("grep", "ERROR", "/var/log/messages")
c2 := exec.Command("wc", "-l")
c2.Stdin, _ = c1.StdoutPipe()
c2.Stdout = os.Stdout
_ = c2.Start()
_ = c1.Run()
_ = c2.Wait()
- 设置环境变量
os.Setenv("NAME","szx")
cmd := exec.Command("echo", os.ExpandEnv("$NAME"))
3. flag库
func init() {
flag.StringVar(&name, "name", "jack", "your name")
}
//从参数中查询
m:= flag.Lookup("members")
4. 读文件
//整个文件读入内存
//os
content, err := os.ReadFile("a.txt")
//import "io/ioutil"
content, err := ioutil.ReadFile("a.txt")
//import os
file, err := os.Open("a.txt")//c创建句柄
content, err := ioutil.ReadAll(file)
//每次只读取一行
bufio.ReadLine()
fi, err := os.Open("christmas_apple.py")//创建句柄
// 创建 Reader
r := bufio.NewReader(fi)
for{
lineBytes, err := r.ReadBytes('\n')
if err == io.EOF {
break
}
}
fi, err := os.Open("a.txt")//句柄
r := bufio.NewReader(fi)
for {
line, err := r.ReadString('\n')
if err == io.EOF {
break
}
}
//每次读取固定字节数
//os库
fi, err := os.Open("a.txt")//句柄
r := bufio.NewReader(fi)//reader
// 每次读取 1024 个字节
buf := make([]byte, 1024)
for {
n, err := r.Read(buf)
if n == 0 {
break
}
}
//syscall库读取