目录
GO 控制台输入
不同基础类型之间的转化 对于不同的基础类型之间的转化,Go提供了strconv包。它实现了字符串与其他基本数据类型之间的转化。其中最常用的数值转化函数是Atoi和Itoa,简单了解下它的使用。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