目录


GO 控制台输入

不同基础类型之间的转化 对于不同的基础类型之间的转化,Go提供了strconv包。它实现了字符串与其他基本数据类型之间的转化。其中最常用的数值转化函数是AtoiItoa,简单了解下它的使用。Atoi方法可以将字符串类型的数值直接转化为int类型的数值,而Itoa可以将int类型的数值转化为string类型的值。 示例:控制台输入一个数值,进行数值大小的比较。

 示例:

控制台输入:
package main
​
import "fmt"
​
func main() {
    var num string
    //实现控制台的输入
    //控制台提示语句
    fmt.Print("请输入一个整数:")
    fmt.Scan(&num)
    fmt.Println("数值是", num)
    fmt.Printf("数据类型:%T", num)
}
控制台:终端
PS F:\goProject> cd .\src\dev_code\day7\example1\main\
PS F:\goProject\src\dev_code\day7\example1\main> go run .\main.go
请输入一个整数:10100
数值是 10100
数据类型:string
PS F:\goProject\src\dev_code\day7\example1\main>
​
数值比较大小
package main
​
import (
    "fmt"
    "strconv"
)
​
func main() {
    var num string
    //实现控制台的输入
    //控制台提示语句
    fmt.Print("请输入一个整数:")
    fmt.Scan(&num)
    fmt.Println("数值是", num)
    fmt.Printf("数据类型:%T\n", num)
    //数据类型转换string--int
    value, _ := strconv.Atoi(num)
    fmt.Printf("转换后的数据类型是%T\n", value)
    fmt.Printf("转换后的数据是%d\n", value)
    //数值判断
    if value > 100 {
        fmt.Println("数值较大")
    } else {
        fmt.Println("数值较小")
    }
}
​
在控制台(终端)输入
PS F:\goProject\src\dev_code\day7\example1\main> go run .\main.go
请输入一个整数:101
数值是 101
数据类型:string
转换后的数据类型是int
转换后的数据是101
数值较大
PS F:\goProject\src\dev_code\day7\example1\main> go run .\main.go
PS F:\goProject\src\dev_code\day7\example1\main> go run .\main.go
请输入一个整数:99
数值是 99
数据类型:string
转换后的数据类型是int
转换后的数据是99
数值较小
PS F:\goProject\src\dev_code\day7\example1\main> go run .\main.go
请输入一个整数:hello
数值是 hello
数据类型:string
转换后的数据类型是int
转换后的数据是0
数值较小

随机数

package main
​
import (
    "fmt"
    "math/rand"
    "time"
)
​
//随机数分两种:伪随机:产生随机数的概率看起来相等,真随机
//真随机:
func main() {
    //随机种子时间轴
    rand.Seed(time.Now().Unix())
    for i := 0; i < 10; i++ {
        a := rand.Intn(300)  //随机数[0,300)
        fmt.Printf(" %d", a)
    }
    
[Running] go run "f:\goProject\src\dev_code\day7\example2\main\main.go"
 167 190 288 24 100 115 77 175 143 211
[Done] exited with code=0 in 0.569 seconds

猜商品价格:

//猜商品价格,商品价格随机生成【0-300)如果输入的价格大于商品价格
//则提示价格过高,如果价格过低。则提示价格过低。直到猜中价格,输出
//猜了多少次
​
package main
​
import (
    "fmt"
    "math/rand"
    "time"
)
​
func main() {
    rand.Seed(time.Now().Unix()) //随机种子时间轴
    a := rand.Intn(300)  //生成一个随机数
    // fmt.Println(a)
    var b int
    var count int
    for {
        fmt.Println("请输入价格:")
        fmt.Scan(&b)
        if a < b {
            fmt.Println("猜高了")
            count++
            continue
        } else if a > b {
            fmt.Println("猜低了")
            count++
            continue
        } else if a == b {
            count++
            fmt.Printf("你猜对了,价格%d,猜了%d次", a, count)
            break
        }
    }
}
PS F:\goProject\src\dev_code\day7\example3\main> go run .\main.go
请输入价格:
150
猜高了
请输入价格:
75
猜高了
请输入价格:
30
猜低了
请输入价格:
50
猜低了
请输入价格:
59
猜低了
请输入价格:
65
猜低了
请输入价格:
69
猜低了
请输入价格:
72
猜高了
请输入价格:
71
猜高了
请输入价格:
70
你猜对了,价格70,猜了10次
或者:
package main
​
import (
    "fmt"
    "math/rand"
    "time"
)
​
//案例:
//猜商品价格,商品高低,商品价格随机生成[0-300)  如果你输入的价格大于商品价格则提示价格过高
//如果你输入的价格低于商品价格提示价格过低,直到猜中商品价格为止,并统计猜的次数
//全局变量
var (
    price int
    count int
)
​
func main() {
​
    b := test()
    fmt.Println("总共猜中的次数:", b)
​
}
​
func test() 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)
            return count
        case price > real_price:
            count++
            fmt.Println("猜得价格过高")
            continue
        default:
            count++
            fmt.Println("猜得价格过低")
            continue
        }
    }
}

高并发读写加缓冲区

原理图

 示例:

(项目中一般用这种写法)
package main
​
import (
    "bufio"
    "fmt"
    "os"
)
​
func main() {
    fmt.Println("请输入内容:")
    str1 := getInput()
    fmt.Println(str1)
}
​
//缓冲区控制台写入
func getInput() string {
    //os.Stdin控制台输入
    //NewReader创建一个默认的缓冲区
    //bufio 缓冲区从控制台读取信息
    in := bufio.NewReader(os.Stdin)
    //从缓冲区中读取字符串信息
    //readline从缓冲区中提取数据
    str, _, err := in.ReadLine()//如果有空白就弃掉,有报错就到err
    if err != nil {
        return err.Error()
    }
    return string(str)
}
PS F:\goProject\src\dev_code\day7\example4\main> go run .\main.go
请输入内容:
wangwu
wangwu
或者另一种高并发缓冲区使用(项目中一般用这种写法)
package main
​
import (
    "bufio"
    "fmt"
    "os"
)
​
func main() {
    fmt.Println("请输入内容:")
    str1 := getStrInput()
    fmt.Println(str1)
​
}
func getStrInput() string {
    var str string
    //创建bufio缓冲区,利用NewScanner加载控制台输入
    in := bufio.NewScanner(os.Stdin)
    if in.Scan() {
        str = in.Text()
    } else {
        str = "not found"  //错误可以自定义输出
    }
    return str
}
PS F:\goProject\src\dev_code\day7\example4\main> go run .\main.go   
请输入内容:
lisi
lisi