您好,登錄后才能下訂單哦!
這篇“Go語言如何實現控制臺輸入并生成隨機數”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Go語言如何實現控制臺輸入并生成隨機數”文章吧。
對于不同的基礎類型之間的轉化,Go 提供了 strconv包。它實現了字符串與其他基本數據類型之間的轉化。
其中最常用的數值轉化函數是Atoi和ltoa
Atoi 方法可以將字符串類型的數值直接轉化為int類型的數值,而 ltoa 可以將 int 類型的數值轉化為string類型的值。
示例:控制臺輸入一個數值,進行數據大小的比較
package main import ( "fmt" "strconv" ) func main() { var number string fmt.Println("請輸入一個整數:") //控制臺輸入,&指定一個地址 fmt.Scan(&number) fmt.Println("數值是: ", number) fmt.Printf("數據類型是:%T", number) //數據類型轉換string——》int //空白標識符接受err數值 value, _ := strconv.Atoi(number) //數值判斷 fmt.Printf("轉換后的數據類型是: %T\n", value) if value > 100 { fmt.Println("數值較大") } else { fmt.Println("數值較小") } }
go語言中的隨機數應該說是偽隨機
math/rand 包實現了偽隨機數生成器
在go語言中隨機數需要設置種子,如果不設置種子,隨機數每次運行的結果相同
默認種子是1,且相同種子產生的隨機數是相同的
為了保證種子不是固定的,使用time這個包來調取當前時間,采用當前時間的納秒作為種子來生成隨機數
示例
package main import ( "fmt" "math/rand" "time" ) func main() { rand.Seed(time.Now().Unix()) for i := 0; i < 10; i++ { value := rand.Intn(10)//Intn(10) 左閉右開區間 [0,10) fmt.Println(value) } }
執行結果如下
0
4
4
4
5
8
9
4
4
7
這里有二個,不能選錯
//猜商品價格,商品高低,商品價格隨機生成[0-300) //如果你輸入的價格大于商品價格則提示價格過高 //如果你輸入的價格低于商品價格提示價格過低,直到猜中商品價格為止,并統計猜的次數 package main import ( "fmt" "math/rand" "time" ) func main() { var ( price int count int ) rand.Seed(time.Now().Unix()) real_price := rand.Intn(300) for { fmt.Println("請輸入價格:") fmt.Scan(&price) switch { case price == real_price: count++ fmt.Println("恭喜你猜對價格,價格為:", real_price) goto TAG case price > real_price: count++ fmt.Println("價格過高,請重新輸入!") continue default: count++ fmt.Println("價格過低,請重新輸入!") continue } } TAG: fmt.Println("總共猜的次數為:", count) } //終端交互結果如下 PS D:\goproject\src\dev_code\test01\example4\main> go run .\main.go 請輸入價格: 100 價格過低,請重新輸入! 請輸入價格: 200 價格過低,請重新輸入! 請輸入價格: 280 價格過高,請重新輸入! 請輸入價格: 270 價格過高,請重新輸入! 請輸入價格: 260 價格過高,請重新輸入! 請輸入價格: 250 價格過高,請重新輸入! 請輸入價格: 240 價格過低,請重新輸入! 請輸入價格: 245 價格過高,請重新輸入! 請輸入價格: 243 價格過高,請重新輸入! 請輸入價格: 242 恭喜你猜對價格,價格為: 242 總共猜的次數為: 10 --------------------------------------------------------------------------------------------- //方法二 package main import ( "fmt" "math/rand" "time" ) func main() { var ( price int count int ) rand.Seed(time.Now().Unix()) real_price := rand.Intn(300) for { fmt.Println("請輸入價格:") fmt.Scan(&price) if price == real_price { count++ fmt.Println("恭喜猜對價格!商品的價格為:", real_price) break } if price > real_price { count++ fmt.Println("價格過高,請重新輸入!") } else { count++ fmt.Println("價格過低,請重新輸入!") continue } } fmt.Println("總共猜了:", count, "次!") } //輸出結果 請輸入價格: 100 價格過低,請重新輸入! 請輸入價格: 500 價格過高,請重新輸入! 請輸入價格: 400 價格過高,請重新輸入! 請輸入價格: 300 價格過高,請重新輸入! 請輸入價格: 200 價格過高,請重新輸入! 請輸入價格: 150 價格過高,請重新輸入! 請輸入價格: 140 價格過高,請重新輸入! 請輸入價格: 130 價格過高,請重新輸入! 請輸入價格: 122 價格過低,請重新輸入! 請輸入價格: 126 價格過低,請重新輸入! 請輸入價格: 128 恭喜猜對價格!商品的價格為: 128 總共猜了: 11 次!
大致流程如下
用戶往程序控制臺進行輸入,當出現高并發讀寫的時候,所以的線程不一定能處理過來,這時候就把請求收納到緩沖區中;
使用bufio.NewReader(os.Stdin)可以建立緩沖區,并把數據從控制臺拿到緩沖區);
使用ReadLine()方式把數據從緩沖區拿到程序中,判斷數據中的是否存在報錯,有錯誤交給Err()處理并輸出報錯信息,而正確的字符串則提取出來給程序去使用。
示例:
package main import ( "bufio" "fmt" "os" ) func main() { fmt.Println("請輸入內容:") str1 := getInput() fmt.Println(str1) } //緩沖區控制臺寫入 func getInput() string { //bufio 緩沖區從控制臺中讀取輸入的信息,緩沖區名為in in := bufio.NewReader(os.Stdin) //從緩沖區讀取字符串信息 str, _, err := in.ReadLine() if err != nil { return err.Error() } return string(str) }
終端輸出結果如下
請輸入內容:
hello
hello
示例
使用Scan()相比于上面的方法,可以自定義報錯信息,代碼更簡潔方便
package main import ( "bufio" "fmt" "os" ) func main() { fmt.Println("請輸入內容:") str1 := getInputByScanner() fmt.Println(str1) } 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 }
結果如下
請輸入內容:
hello
hello
以上就是關于“Go語言如何實現控制臺輸入并生成隨機數”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。