目录
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