最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang操作命令行的幾種方式總結

 更新時間:2022年09月14日 08:44:22   作者:jiaxwu???????  
這篇文章主要介紹了Golang操作命令行的幾種方式總結,文章通過圍主題思想展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下

前言

在實際開發(fā)工作中,我們經常使用命令行進行日志分析、程序部署、debug程序等工作。在Linux下,|、grep、find、xagrs、awk等工具是非常強大的,可以很容易的完成各種數(shù)據處理。在需求比較簡單的情況下,我們會直接命令行;如果再復雜一點,我們會編寫簡單的Shell腳本;如果業(yè)務更加復雜,shell已經不適合進行處理了,我們就會使用我們熟悉的語言進行編碼,如果你剛好使用Golang,那么可以使用Golang內置的exec.Command完成命令行操作。

簡單使用

func main() {
        // # grep 321 2022053015.log
	command := exec.Command("grep", "321", "2022053015.log")
	out := bytes.NewBuffer(nil)
	command.Stdout = out
	command.Stderr = os.Stderr
	if err := command.Run(); err != nil {
		log.Fatal(err)
	}
	fmt.Println(out.String())
}

上面的代碼是最簡單的一種使用命令行工具的方式,它會直接調用對應工具的程序,然后獲取執(zhí)行結果。然而,如果像下面這樣包含通配符,是無法實現(xiàn)我們想要的效果的。因為通配符是Shell程序進行處理的,而我們這里是直接調用grep程序,因此只會去查詢是否有精準匹配20220530*.log名字的文件,不會展開*。

func main() {
	// # grep 321 20220530*.log
	command := exec.Command("grep", "321", "20220530*.log")
	out := bytes.NewBuffer(nil)
	command.Stdout = out
	command.Stderr = os.Stderr
	if err := command.Run(); err != nil {
		log.Fatal(err)
	}
	fmt.Println(out.String()) 
}

使用Shell執(zhí)行命令

為了能夠使用Shell的能力,我們需要先進入Shell上下文,再輸入我們需要的命令。

func main() {
        // 進入Shell上下文
	command := exec.Command("sh")
	in := bytes.NewBuffer(nil)
	out := bytes.NewBuffer(nil)
	command.Stdin = in
	command.Stdout = out
	command.Stderr = os.Stderr
        // 輸入命令,記得每個命令最后以換行符結束,這樣Shell才會執(zhí)行這個命令
	grepCmd := fmt.Sprintf("grep %s %s*.log\n", "321", "20220530")
	in.WriteString(grepCmd)
        // 完成之后退出Shell上下文
	in.WriteString("exit\n")
	if err := command.Run(); err != nil {
		log.Fatal(err)
	}
	fmt.Println(out.String())
}

簡單封裝Shell執(zhí)行命令

上面的代碼核心只有grepCmd := fmt.Sprintf("grep %s %s*.log\n", "321", "20220530")這一行,其他的基本上都是模板代碼,因此最好簡單封裝一下,避免到處拷貝代碼。

// 執(zhí)行shell命令
func Exec(cmd string) (*bytes.Buffer, error) {
	command := exec.Command("sh")
	in := bytes.NewBuffer(nil)
	out := bytes.NewBuffer(nil)
	command.Stdin = in
	command.Stdout = out
	command.Stderr = os.Stderr
	in.WriteString(cmd)
	in.WriteString("exit\n")
	return out, command.Run()
}
func main() {
	grepCmd := fmt.Sprintf("grep %s %s*.log\n", "321", "20220530")
	out, err := Exec(grepCmd)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(out.String())
}

到此這篇關于Golang操作命令行的幾種方式總結的文章就介紹到這了,更多相關Golang命令行操作內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • golang如何部署到服務器及應注意問題解析

    golang如何部署到服務器及應注意問題解析

    這篇文章主要為大家介紹了golang如何部署到服務器及應注意問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Golang分布式注冊中心實現(xiàn)流程講解

    Golang分布式注冊中心實現(xiàn)流程講解

    這篇文章主要介紹了Golang分布式注冊中心實現(xiàn)流程,注冊中心可以用于服務發(fā)現(xiàn),服務注冊,配置管理等方面,在分布式系統(tǒng)中,服務的發(fā)現(xiàn)和注冊是非常重要的組成部分,需要的朋友可以參考下
    2023-05-05
  • 秒懂Golang匿名函數(shù)

    秒懂Golang匿名函數(shù)

    所謂匿名函數(shù),就是沒有名字的函數(shù),本文重點給大家介紹Golang匿名函數(shù)的相關知識,通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Golang中常見加密算法的總結

    Golang中常見加密算法的總結

    這篇文章主要為大家詳細介紹了Golang中常見的一些加密算法的實現(xiàn),文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解一下
    2023-03-03
  • 解密Golang中Request對象的操作

    解密Golang中Request對象的操作

    這篇文章主要和大家深入探討?Golang?中的?Request?對象,并從多個方面介紹其功能、結構和使用方法,文中的示例代碼講解詳細,感興趣的可以了解一下
    2023-05-05
  • 在Go中構建并發(fā)TCP服務器

    在Go中構建并發(fā)TCP服務器

    今天小編就為大家分享一篇關于在Go中構建并發(fā)TCP服務器的文章,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • go標準庫net/http服務端的實現(xiàn)示例

    go標準庫net/http服務端的實現(xiàn)示例

    go的http標準庫非常強大,本文主要介紹了go標準庫net/http服務端,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-07-07
  • golang高性能的http請求 fasthttp詳解

    golang高性能的http請求 fasthttp詳解

    fasthttp 是 Go 的快速 HTTP 實現(xiàn),當前在 1M 并發(fā)的生產環(huán)境使用非常成功,可以從單個服務器進行 100K qps 的持續(xù)連接,總而言之,fasthttp 比 net/http 快 10 倍,下面通過本文給大家介紹golang fasthttp http請求的相關知識,一起看看吧
    2021-09-09
  • golang實現(xiàn)簡單的udp協(xié)議服務端與客戶端示例

    golang實現(xiàn)簡單的udp協(xié)議服務端與客戶端示例

    這篇文章主要介紹了golang實現(xiàn)簡單的udp協(xié)議服務端與客戶端,結合實例形式分析了基于UDP協(xié)議的數(shù)據傳輸相關實現(xiàn)技巧,需要的朋友可以參考下
    2016-07-07
  • Go中的函數(shù)選項模式(Functional Options Pattern)詳解

    Go中的函數(shù)選項模式(Functional Options Pattern)詳解

    在 Go 語言中,函數(shù)選項模式是一種優(yōu)雅的設計模式,用于處理函數(shù)的可選參數(shù),本文將對其進行講解,準備好了嗎,快跟隨著本文一探究竟吧
    2023-06-06

最新評論

瓦房店市| 赤城县| 义马市| 诸暨市| 永川市| 逊克县| 上犹县| 东兰县| 台南市| 泰兴市| 沾益县| 博客| 安泽县| 固安县| 武安市| 陵水| 龙游县| 安义县| 瑞安市| 闽清县| 固阳县| 贺兰县| 岐山县| 九江县| 唐海县| 西平县| 翁牛特旗| 遂宁市| 大埔县| 东乌珠穆沁旗| 林芝县| 高密市| 石棉县| 榕江县| 抚远县| 凉山| 辽源市| 溆浦县| 汉中市| 通化县| 三明市|