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对象,命令的执行分为三种情况:

  1. 只执行命令
cmd := exec.Command("ls", "-l", "/var/log/")
err := cmd.Run()
  1. 执行命令并获取结果(不区分stdout,stderr)
cmd:=exec.Command("ls")
out,err:=cmd.CombinedOutput()
//ls -l /var/log/*.log对应的shell命令
//ls -l "/var/log/*.log"
  1. 执行命令并获取结果(区分stdout,stderr)
cmd := exec.Command("ls", "-l", "\"/var/log/*.log\"")
var stdout, stderr bytes.Buffer
cmd.Stdout = &stdout  // 标准输出
cmd.Stderr = &stderr  // 标准错误
  1. 管道
    将上一条命令的执行输出结果,做为下一条命令的参数
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()
  1. 设置环境变量
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库读取
posted @ 2022-04-21 20:46  流光之中  阅读(282)  评论(0编辑  收藏  举报