Scanner,用於處理數據讀取的簡單任務,支持按行、按單詞等方式讀取,一般用於一些簡單的讀取場景。注意:Scanner 默認是按行讀取,可以調用 Split 方法修改讀取方式。
1. 接收標准輸入
scanner := bufio.NewScanner(os.stdin)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
2. 接收文件內容
f, _ := os.Open("xxx.txt")
scanner := bufio.NewScanner(f)
for scanner.Scan() {
// ...
}
func printFile(filename string) {
file, err := os.Open(filename)
if err != nil {
panic(err)
}
scanner := bufio.NewScanner(file)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}
func main() {
printFile("users.txt")
}
3. 示例
// 接收用戶輸入的賬號密碼
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
Login()
}
func Login() (map[string]string, map[string]string) {
user := map[string]string{}
pass := map[string]string{}
fmt.Println("歡迎光臨!")
fmt.Println("請輸入用戶名:")
LoginUser := bufio.NewScanner(os.Stdin)
if LoginUser.Scan() {
user["userName"] = LoginUser.Text()
} else {
user["userName"] = "輸入錯誤"
}
fmt.Println("請輸入登錄密碼:")
LoginPassword := bufio.NewScanner(os.Stdin)
if LoginPassword.Scan() {
pass["PassWord"] = LoginPassword.Text()
} else {
pass["PassWord"] = "您輸入錯誤"
}
return user,pass
}
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
str := "A vegan woman in Australia is taking her neighbor to court because he keeps -- wait for it -- barbecuing stuff in his backyard. The smell of the meat and fish he's been cooking has apparently prevented her from enjoying her own backyard."
scanner := bufio.NewScanner(strings.NewReader(str))
// 設置分詞方式(按行讀取)
scanner.Split(bufio.ScanLines)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
fmt.Println("-------------------")
// 按單詞讀取
wordScanner := bufio.NewScanner(strings.NewReader(str))
wordScanner.Split(bufio.ScanWords)
for wordScanner.Scan() {
fmt.Println(wordScanner.Text())
}
}
https://studygolang.com/articles/21198
https://blog.csdn.net/weixin_29662775/article/details/112099878
https://www.nuomiphp.com/eplan/676180.html
https://vimsky.com/examples/detail/golang-ex-bufio-Scanner-Text-method.html