使用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小白,歡迎補充指正