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

Golang操作命令行的幾種方式總結(jié)

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

前言

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

簡(jiǎn)單使用

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())
}

上面的代碼是最簡(jiǎn)單的一種使用命令行工具的方式,它會(huì)直接調(diào)用對(duì)應(yīng)工具的程序,然后獲取執(zhí)行結(jié)果。然而,如果像下面這樣包含通配符,是無(wú)法實(shí)現(xiàn)我們想要的效果的。因?yàn)橥ㄅ浞荢hell程序進(jìn)行處理的,而我們這里是直接調(diào)用grep程序,因此只會(huì)去查詢(xún)是否有精準(zhǔn)匹配20220530*.log名字的文件,不會(huì)展開(kāi)*。

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的能力,我們需要先進(jìn)入Shell上下文,再輸入我們需要的命令。

func main() {
        // 進(jìn)入Shell上下文
	command := exec.Command("sh")
	in := bytes.NewBuffer(nil)
	out := bytes.NewBuffer(nil)
	command.Stdin = in
	command.Stdout = out
	command.Stderr = os.Stderr
        // 輸入命令,記得每個(gè)命令最后以換行符結(jié)束,這樣Shell才會(huì)執(zhí)行這個(gè)命令
	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())
}

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

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

// 執(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())
}

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

相關(guān)文章

  • golang如何部署到服務(wù)器及應(yīng)注意問(wèn)題解析

    golang如何部署到服務(wù)器及應(yīng)注意問(wèn)題解析

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

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

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

    秒懂Golang匿名函數(shù)

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

    Golang中常見(jiàn)加密算法的總結(jié)

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

    解密Golang中Request對(duì)象的操作

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

    在Go中構(gòu)建并發(fā)TCP服務(wù)器

    今天小編就為大家分享一篇關(guān)于在Go中構(gòu)建并發(fā)TCP服務(wù)器的文章,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • go標(biāo)準(zhǔn)庫(kù)net/http服務(wù)端的實(shí)現(xiàn)示例

    go標(biāo)準(zhǔn)庫(kù)net/http服務(wù)端的實(shí)現(xiàn)示例

    go的http標(biāo)準(zhǔn)庫(kù)非常強(qiáng)大,本文主要介紹了go標(biāo)準(zhǔn)庫(kù)net/http服務(wù)端,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • golang高性能的http請(qǐng)求 fasthttp詳解

    golang高性能的http請(qǐng)求 fasthttp詳解

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

    golang實(shí)現(xiàn)簡(jiǎn)單的udp協(xié)議服務(wù)端與客戶(hù)端示例

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

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

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

最新評(píng)論

平安县| 收藏| 读书| 临高县| 陇南市| 康平县| 房山区| 邢台县| 巴青县| 阳谷县| 孟连| 夏邑县| 新建县| 潞城市| 元谋县| 远安县| 若羌县| 林州市| 华坪县| 霍林郭勒市| 原阳县| 平度市| 横山县| 扶余县| 河津市| 台北市| 阿拉善右旗| 鹤峰县| 郴州市| 密云县| 南丹县| 化州市| 南江县| 贡嘎县| 兴义市| 会理县| 安吉县| 玉田县| 于田县| 沧州市| 万安县|