tft每日頭條

 > 圖文

 > go 腳本開發

go 腳本開發

圖文 更新时间:2025-06-19 22:41:49

  go 腳本開發(如何在Go中輕松編寫類似)(1)

  Script 是一個 Go 庫,用于執行 Shell 腳本擅長的任務:讀取文件,執行子進程,計算行,匹配字符串等。

  在 Go 中編寫系統管理程序并不像在傳統的 shell 中那樣容易,而 Script 的出現,剛好彌補了這一問題。即使像 Shell 腳本在數據流(管道)上完成一系列操作,Script 也能做到。

  go 腳本開發(如何在Go中輕松編寫類似)(2)

  能用 Script 做什麼呢?我們舉個例子,假設您要以字符串形式讀取文件的内容:

  contents, err := script.File("test.txt").String()

  這看起來很簡單,但假設您現在想要計算該文件中的行數。

  numLines, err := script.File("test.txt").CountLines()

  對于更具挑戰性的事情,讓我們嘗試計算文件中與字符串“Error”匹配的行數:

  numErrors, err := script.File("test.txt").Match("Error").CountLines()

  但是,如果不是讀取特定文件,我們想簡單地将輸入輸入到該程序中,并且隻輸出匹配的行(如grep)?

  script.Stdin().Match("Error").Stdout()

  那太簡單了!因此,讓我們在命令行中傳入一個文件列表,讓我們的程序按順序讀取它們并輸出匹配的行:

  script.Args().Concat().Match("Error").Stdout()

  那是什麼?您想将該輸出附加到文件而不是将其打印到終端?沒問題:

  script.Args().Concat().Match("Error").AppendFile("/var/log/errors.txt")

  它是如何工作的?

  函數調用看起來有點奇怪。發生了什麼?

  關于Unix shell及其許多模仿者的一個有趣的事情是你可以将操作組合成一個管道:

  cat test.txt | grep Error | wc -l

  管道的每個階段的輸出都會輸入到下一個階段,您可以将每個階段視為一個過濾器,僅将其輸入的某些部分傳遞給其輸出。

  相比之下,在原始 Go 中編寫類似 shell 的腳本要方便得多,因為您所做的每件事都會返回不同的數據類型,并且您必須(或至少應該)在每次操作後檢查錯誤。

  在用于系統管理的腳本中,我們經常希望以快速方便的方式組合這樣的不同操作。如果在管道的某處發生錯誤,我們想在結束時檢查一次,而不是在每次操作之後檢查。

  GitHub 地址:htt

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved