最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言實現(xiàn)控制臺輸入&生成隨機(jī)數(shù)詳解

 更新時間:2022年05月26日 11:47:56   作者:隱姓埋名4869  
這篇文章主要介紹了Go語言如何實現(xiàn)控制臺輸入&生成隨機(jī)數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1. 不同基礎(chǔ)類型之間的轉(zhuǎn)化

對于不同的基礎(chǔ)類型之間的轉(zhuǎn)化,Go 提供了 strconv包。它實現(xiàn)了字符串與其他基本數(shù)據(jù)類型之間的轉(zhuǎn)化。

其中最常用的數(shù)值轉(zhuǎn)化函數(shù)是Atoi和ltoa

Atoi 方法可以將字符串類型的數(shù)值直接轉(zhuǎn)化為int類型的數(shù)值,而 ltoa 可以將 int 類型的數(shù)值轉(zhuǎn)化為string類型的值。

示例:控制臺輸入一個數(shù)值,進(jìn)行數(shù)據(jù)大小的比較

package main
 
import (
    "fmt"
    "strconv"
)
 
func main() {
    var number string
    fmt.Println("請輸入一個整數(shù):")
    //控制臺輸入,&指定一個地址
    fmt.Scan(&number)
    fmt.Println("數(shù)值是: ", number)
    fmt.Printf("數(shù)據(jù)類型是:%T", number)
    //數(shù)據(jù)類型轉(zhuǎn)換string——》int
    //空白標(biāo)識符接受err數(shù)值
    value, _ := strconv.Atoi(number)
    //數(shù)值判斷
    fmt.Printf("轉(zhuǎn)換后的數(shù)據(jù)類型是: %T\n", value)
    if value > 100 {
        fmt.Println("數(shù)值較大")
    } else {
        fmt.Println("數(shù)值較小")
    }
}  

2. Go 語言隨機(jī)數(shù)

go語言中的隨機(jī)數(shù)應(yīng)該說是偽隨機(jī)

math/rand 包實現(xiàn)了偽隨機(jī)數(shù)生成器

在go語言中隨機(jī)數(shù)需要設(shè)置種子,如果不設(shè)置種子,隨機(jī)數(shù)每次運行的結(jié)果相同

默認(rèn)種子是1,且相同種子產(chǎn)生的隨機(jī)數(shù)是相同的

為了保證種子不是固定的,使用time這個包來調(diào)取當(dāng)前時間,采用當(dāng)前時間的納秒作為種子來生成隨機(jī)數(shù)

示例

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) 左閉右開區(qū)間 [0,10)
        fmt.Println(value)
    }
}

執(zhí)行結(jié)果如下

0
4
4
4
5
8
9
4
4
7 

這里有二個,不能選錯

//猜商品價格,商品高低,商品價格隨機(jī)生成[0-300)
//如果你輸入的價格大于商品價格則提示價格過高
//如果你輸入的價格低于商品價格提示價格過低,直到猜中商品價格為止,并統(tǒng)計猜的次數(shù)
 
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("總共猜的次數(shù)為:", count)
}
 
//終端交互結(jié)果如下
PS D:\goproject\src\dev_code\test01\example4\main> go run .\main.go
請輸入價格:
100
價格過低,請重新輸入!
請輸入價格:
200
價格過低,請重新輸入!
請輸入價格:
280
價格過高,請重新輸入!
請輸入價格:
270
價格過高,請重新輸入!
請輸入價格:
260
價格過高,請重新輸入!
請輸入價格:
250
價格過高,請重新輸入!
請輸入價格:
240
價格過低,請重新輸入!
請輸入價格:
245
價格過高,請重新輸入!
請輸入價格:
243
價格過高,請重新輸入!
請輸入價格:
242
恭喜你猜對價格,價格為: 242
總共猜的次數(shù)為: 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, "次!")
}
 
//輸出結(jié)果
 
請輸入價格:
100
價格過低,請重新輸入!
請輸入價格:
500
價格過高,請重新輸入!
請輸入價格:
400
價格過高,請重新輸入!
請輸入價格:
300
價格過高,請重新輸入!
請輸入價格:
200
價格過高,請重新輸入!
請輸入價格:
150
價格過高,請重新輸入!
請輸入價格:
140
價格過高,請重新輸入!
請輸入價格:
130
價格過高,請重新輸入!
請輸入價格:
122
價格過低,請重新輸入!
請輸入價格:
126
價格過低,請重新輸入!
請輸入價格:
128
恭喜猜對價格!商品的價格為: 128
總共猜了: 11 次!

3. 高并發(fā)輸入解析

大致流程如下

用戶往程序控制臺進(jìn)行輸入,當(dāng)出現(xiàn)高并發(fā)讀寫的時候,所以的線程不一定能處理過來,這時候就把請求收納到緩沖區(qū)中;

使用bufio.NewReader(os.Stdin)可以建立緩沖區(qū),并把數(shù)據(jù)從控制臺拿到緩沖區(qū));

使用ReadLine()方式把數(shù)據(jù)從緩沖區(qū)拿到程序中,判斷數(shù)據(jù)中的是否存在報錯,有錯誤交給Err()處理并輸出報錯信息,而正確的字符串則提取出來給程序去使用。

示例:

package main
 
import (
    "bufio"
    "fmt"
    "os"
)
 
func main() {
    fmt.Println("請輸入內(nèi)容:")
    str1 := getInput()
    fmt.Println(str1)
}
 
//緩沖區(qū)控制臺寫入
func getInput() string {
    //bufio 緩沖區(qū)從控制臺中讀取輸入的信息,緩沖區(qū)名為in
    in := bufio.NewReader(os.Stdin)
 
    //從緩沖區(qū)讀取字符串信息
    str, _, err := in.ReadLine()
    if err != nil {
        return err.Error()
    }
    return string(str)
}

終端輸出結(jié)果如下

請輸入內(nèi)容:
hello
hello 

示例 

使用Scan()相比于上面的方法,可以自定義報錯信息,代碼更簡潔方便

package main
 
import (
    "bufio"
    "fmt"
    "os"
)
 
func main() {
    fmt.Println("請輸入內(nèi)容:")
    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
}

結(jié)果如下

請輸入內(nèi)容:
hello
hello 

到此這篇關(guān)于Go語言實現(xiàn)控制臺輸入&生成隨機(jī)數(shù)詳解的文章就介紹到這了,更多相關(guān)Go語言輸入生成隨機(jī)數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go操作Kafka的實現(xiàn)示例(kafka-go)

    Go操作Kafka的實現(xiàn)示例(kafka-go)

    本文介紹了使用kafka-go庫在Go語言中與Kafka進(jìn)行交互,涵蓋了kafka-go的安裝、API使用、消息發(fā)送與消費方法,以及如何通過DockerCompose快速搭建Kafka環(huán)境,文章還比較了其他兩個常用的Kafka客戶端庫,感興趣的可以了解一下
    2024-10-10
  • Go語言使用sqlx操作MySQL

    Go語言使用sqlx操作MySQL

    sqlx 包作為一個擴(kuò)展庫,它在 database/sql 的基礎(chǔ)上,提供了更高級別的便利,極大地簡化了數(shù)據(jù)庫操作,本文章將介紹如何通過sqlx包來操作 MySQL 數(shù)據(jù)庫,感興趣的可以了解下
    2024-11-11
  • Golang學(xué)習(xí)筆記(六):struct

    Golang學(xué)習(xí)筆記(六):struct

    這篇文章主要介紹了Golang學(xué)習(xí)筆記(六):struct,本文講解了struct的聲明及初始化、struct的匿名字段(繼承)、method、method繼承和重寫等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • 使用VSCODE配置GO語言開發(fā)環(huán)境的完整步驟

    使用VSCODE配置GO語言開發(fā)環(huán)境的完整步驟

    Go語言是采用UTF8編碼的,理論上使用任何文本編輯器都能做Go語言開發(fā),大家可以根據(jù)自己的喜好自行選擇,下面這篇文章主要給大家介紹了關(guān)于使用VSCODE配置GO語言開發(fā)環(huán)境的完整步驟,需要的朋友可以參考下
    2022-11-11
  • golang?db事務(wù)的統(tǒng)一封裝的實現(xiàn)

    golang?db事務(wù)的統(tǒng)一封裝的實現(xiàn)

    這篇文章主要介紹了golang db事務(wù)的統(tǒng)一封裝的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Golang通道channel的源碼分析

    Golang通道channel的源碼分析

    channel(通道),顧名思義,是一種通道,一種用于并發(fā)環(huán)境中數(shù)據(jù)傳遞的通道。channel是golang中標(biāo)志性的概念之一,很好很強(qiáng)大!本文將從源碼帶大家了解一下channel的使用,希望對大家有所幫助
    2022-12-12
  • 分布式架構(gòu)在Go語言網(wǎng)站的應(yīng)用

    分布式架構(gòu)在Go語言網(wǎng)站的應(yīng)用

    分布式架構(gòu)是目前應(yīng)對高流量、高并發(fā)的重要解決方案,分布式架構(gòu)的核心思想是分而治之,將單臺服務(wù)器的資源劃分為多臺服務(wù)器進(jìn)行協(xié)同完成,分布式架構(gòu)應(yīng)用于Go語言網(wǎng)站中既能提升服務(wù)速度,又能降低了服務(wù)器宕機(jī)的風(fēng)險
    2024-01-01
  • go xorm框架的使用

    go xorm框架的使用

    xorm框架和Spring Data Jpa有點相似,可以對比學(xué)習(xí),對于這個框架感覺還不錯,閑暇時間學(xué)習(xí)一下
    2021-05-05
  • 利用go-kit組件進(jìn)行服務(wù)注冊與發(fā)現(xiàn)和健康檢查的操作

    利用go-kit組件進(jìn)行服務(wù)注冊與發(fā)現(xiàn)和健康檢查的操作

    這篇文章主要介紹了利用go-kit組件進(jìn)行服務(wù)注冊與發(fā)現(xiàn)和健康檢查的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Go語言使用MySql的方法

    Go語言使用MySql的方法

    這篇文章主要介紹了Go語言使用MySql的方法,實例分析了Go語言操作MySQL的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02

最新評論

西青区| 奉节县| 博白县| 安泽县| 靖江市| 合肥市| 洛川县| 武强县| 广平县| 太保市| 肇源县| 阜康市| 台南县| 吉安县| 鄂温| 宁南县| 抚顺县| 宕昌县| 革吉县| 六盘水市| 湄潭县| 泽普县| 宣汉县| 长白| 调兵山市| 竹山县| 彝良县| 达州市| 油尖旺区| 云安县| 奎屯市| 万源市| 防城港市| 印江| 泸西县| 肇庆市| 陇川县| 宣城市| 海淀区| 桑日县| 牙克石市|