1. 程式人生 > 其它 >Golang標準庫

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庫讀取