Golang: 接收命令行輸入


上次我們介紹了收集命令行參數的幾種方式,感覺還是不過癮,今天再來介紹一下如何從命令行接收用戶輸入。

我們這里設計一個小需求,借助程序從命令行收集用戶的逐行輸入,以 bye 為結束信號,然后在輸入結束后,統計每一行輸入的內容和該內容出現的次數。

為了完成這個功能,我們首先需要創建一個 map 的數據結構,來存放每一行輸入的內容和對應出現的次數,在 Go 語言中,我們可以使用 make(map[string]int) 這種方式創建所需的數據結構。

那么如何從標准輸入流中接收數據呢,Go 語言提供了 bufio.NewScanner(os.Stdin) 這樣的方式,它和 Java 中的 new Scanner(System.in) 頗為相似,都是在標准輸入流上創建一個掃描對象,對命令行輸入進行逐行掃描。

實現過程比較簡單,我們來瞄一眼吧:

// scan.go

package main

import (
    "os"
    "fmt"
    "bufio"
)

func main() {
    // 創建一個map 指定key為string類型 val為int類型
    counts := make(map[string]int)
    // 從標准輸入流中接收輸入數據
    input := bufio.NewScanner(os.Stdin)

    fmt.Printf("Please type in something:\n")

    // 逐行掃描
    for input.Scan() {
        line := input.Text()

        // 輸入bye時 結束
        if line == "bye" {
            break
        }

        // 更新key對應的val 新key對應的val是默認0值
        counts[line]++
    }

    // 遍歷map統計數據
    for line, n := range counts {
        fmt.Printf("%d : %s\n", n, line)
    }
}

最后,我們運行程序,來看看結果:

$ go run scan.go
Please type in something:
hello
world
hello
bye
# 輸出統計結果
2 : hello
1 : world

可以看出,上面代碼統計出了我們每一行輸入出現的次數,是不是很簡單呢。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM