Go語言實現控制檯輸入的方式

使用bufio和os包實現:類似Java控制檯輸入
bufio建立緩衝區,os.Stdin確定輸入位置
func getInput() string {
	//使用os.Stdin開啓輸入流
	//函數原型 func NewReader(rd io.Reader) *Reader
	//NewReader創建一個具有默認大小緩衝、從r讀取的*Reader 結構見官方文檔
	in := bufio.NewReader(os.Stdin)
	//in.ReadLine函數具有三個返回值 []byte bool error
	//分別爲讀取到的信息 是否數據太長導致緩衝區溢出 是否讀取失敗
	str, _, err := in.ReadLine()
	if err != nil {
		return err.Error()
	}
	return string(str)
}

Reader支持的函數有:詳見官方文檔
在這裏插入圖片描述
同樣使用os.Stdin

func getInputByScanner() string {
	var str string
	//使用os.Stdin開啓輸入流
	in := bufio.NewScanner(os.Stdin)
	if in.Scan() {
		str = in.Text()
	} else {
		str = "Find input error"
	}
	return str
}

Scanner讀取的兩個主要函數:
func (s *Scanner) Bytes() []byte
func (s *Scanner) Text() string

使用fmt包實現:類似C控制檯輸入
func getInputByFmt() string {
	//定義變量
	var str string
	//Scanf函數讀取輸入到變量中 兩個返回值
	//分別爲讀取到的長度 失敗信息
	length, err := fmt.Scanf("%s", &str)//注意使用%s讀取輸入字符串只能讀取到空白符之前
	if err != nil {
		return err.Error()
	}
	fmt.Println("Read length is ", length)
	return str
}

--------------------------------------
測試程序:

func main() {
	fmt.Print("Get input by Reader:")
	str1 := getInput()
	fmt.Println(str1)

	fmt.Print("Get input by Scanner:")
	str2 := getInputByScanner()
	fmt.Println(str2)

	fmt.Print("Get input by fmt:")
	str3 := getInputByFmt()
	fmt.Println(str3)
}

運行結果:
在這裏插入圖片描述

Go小白,歡迎補充指正

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章