go - 学习笔记 -2
类型转换
package main
import (
"fmt"
"reflect"
"strconv"
)
func main() {
// 1、整型之间的转换 int8 int16 int32
//var x int8 = 10
//var y int16 = 20
//fmt.Println(x + int8(y))
// 2、字符串与整型之间的转换:strconv
//var ageStr = "32"
//var age, error = strconv.Atoi(ageStr)
//fmt.Println("error", error) // <nil>
//fmt.Println("age", age, reflect.TypeOf(age))
//price := 100
//priceStr := strconv.Itoa(price)
//fmt.Println(priceStr, reflect.TypeOf(priceStr))
// 3、strconv Parse系列函数
// 将字符串转为整型
//priceStr := "100"
//var price, error = strconv.ParseInt(priceStr, 10, 64)
//fmt.Println("error", error) // <nil>
//fmt.Println("price", price, reflect.TypeOf(price))
// 将字符串转为浮点型
//priceStr := "100.00"
//var price, error = strconv.ParseFloat(priceStr, 64)
//fmt.Println("error", error) // <nil>
//fmt.Println("price", price, reflect.TypeOf(price))
// 将字符串转为布尔型
priceStr := "100.00"
var price, error = strconv.ParseBool(priceStr)
fmt.Println("error", error) // <nil>
fmt.Println("price", price, reflect.TypeOf(price))
// 将字符串转为浮点型
// 将字符串转为布尔值
}
运算符
package main
import "fmt"
func main() {
// 1、 科学运算 + - * / %
//var x, y = 10, 20
//fmt.Println(x + y)
//fmt.Println(x - y)
//fmt.Println(x * y)
//fmt.Println(x / y)
//fmt.Println(x % y)
// 计算一个数字是奇数还是偶数
//fmt.Println(x%2 == 0)
// 2、 比较运算符 > < = !=
//fmt.Println(x > y)
//fmt.Println(x < y)
//fmt.Println(x == y)
//fmt.Println(x != y)
// 3、逻辑运算符 && ||
//fmt.Println(true && false)
//fmt.Println(true || false)
//fmt.Println(!true && false)
// 3.1 案例1
//username := "yuan"
//password := 123
//fmt.Println(username == "yuan" && password == 123)
// 3.2 案例2
//name := "root"
//age := 22
//ret := name == "yuan" || !(age < 33)
//fmt.Println(ret)
// 4、赋值运算
//var x = 10
//x += 1 // x = x +1
//fmt.Println(x)
//x -= 1 // x = x -1
//fmt.Println(x)
//var y = 11
//y++ // y = y + 1
//fmt.Println(y)
// 5、优先级
var a, b, c = 1, 2, 3
fmt.Println(a, b, c)
var t = a + b
fmt.Println(t)
}
输入输出函数
package main
import "fmt"
func main() {
// 1、print和pringln
//var name, age = "yuan", 22
//fmt.Print(name, age)
//fmt.Println(name, age)
// 2、 printf:标准化输出
//name := "yuan"
//age := 24
//isMarried := false
//salary := 3000.549
//fmt.Printf("姓名:%s 年龄:%d 婚否:%t 薪资:%.2f\n", name, age, isMarried, salary)
//fmt.Printf("姓名:%v 年龄:%v 婚否:%v 薪资:%v\n", name, age, isMarried, salary)
//fmt.Printf("姓名:%#v 年龄:%#v 婚否:%#v 薪资:%#v\n", name, age, isMarried, salary)
整形和浮点型
//fmt.Printf("%b\n", 12) // 二进制表示:1100
//fmt.Printf("%d\n", 12) // 十进制表示:12
//fmt.Printf("%o\n", 12) // 八进制表示:14
//fmt.Printf("%x\n", 12) // 十六进制表示:c
//fmt.Printf("%X\n", 12) // 十六进制表示:c
//fmt.Printf("%f\n", 3.1415) // 有小数点而无指数:3.141500
//fmt.Printf("%.3f\n", 3.1415) // 3.142
//fmt.Printf("%e\n", 1000.25) // 科学计数法: 1.000250e+03,默认精度为6
//
设置宽度
//fmt.Printf("学号:%s 姓名:%-20s 平均成绩:%-4d\n", "1001", "alvin", 100)
//fmt.Printf("学号:%s 姓名:%-20s 平均成绩:%-4d\n", "1002", "zuibangdeyuanlaoshi", 98)
//fmt.Printf("学号:%s 姓名:%-20s 平均成绩:%-4d\n", "1003", "x", 78)
// 3、 sprintf
//name := "yuan"
//age := 24
//isMarried := false
//salary := 3000.549
//info := fmt.Sprintf("姓名:%s 年龄:%d 婚否:%t 薪资:%.2f\n", name, age, isMarried, salary)
//fmt.Println(info)
// 4、输入函数 IO函数
// 4.1 fmt.Scan:以空格或换行符分割多个值,都可以
//var name string
//var age int
//fmt.Print("请输入姓名和年龄:")
//fmt.Scan(&name, &age)
//fmt.Println(name, age)
// 4.2 fmt.Scanln:最好只用空格分割多个值,用换行符则默认后续输入值为空。换行即结束。
//var name string
//var age int
//fmt.Print("请输入姓名和年龄:")
//fmt.Scanln(&name, &age)
//fmt.Println(name, age)
// 4.3 fmt.Scanf:最好只用空格分割多个值,用换行符则默认后续输入值为空。换行即结束。
var a, b int
fmt.Print("请按指定格式输入:")
fmt.Scanf("%d+%d", &a, &b)
fmt.Println(a + b)
}
输入输出函数应用
package main
import (
"fmt"
"strings"
)
func main() {
// 案例 一 : 输入以YYYY-MM-DD格式的生日,输入以 YYYY年-MM月-DD日格式
//var birth string
//fmt.Print("请输入年月日以 YYYY-MM-DD格式:")
//fmt.Scan(&birth)
//birthSlice := strings.Split(birth, "-")
//fmt.Printf("您的生日是%s年-%s月-%s日", birthSlice[0], birthSlice[1], birthSlice[2])
// 案例 二:输入一个英文名,如果以A/a开头,则返回true,否则返回flase
var name string
fmt.Print("请输入英文名:")
fmt.Scan(&name)
//var b = (strings.HasPrefix(name, "a")) || (strings.HasPrefix(name, "A"))
UpName := strings.ToUpper(name)
var b = strings.HasPrefix(UpName, "A")
fmt.Println(b)
}
流程控制语句之分支语句
package main
import "fmt"
func main() {
// 分支语句
// 1、单分支 if
//var name = "inner"
//if name == "inner" {
// fmt.Println("姓名匹配成功")
//}
// 2、双分支 if else
//var age int
//fmt.Print("请输入年龄:")
//fmt.Scan(&age)
//if age >= 18 {
// fmt.Println("年龄大于18")
//} else {
// fmt.Println("年龄小于18")
//}
// 2.1 用户输入用户名和密码,判断是否登陆成功
var userName, passWord string
fmt.Print("请输入用户名:")
fmt.Scan(&userName)
fmt.Print("请输入密码:")
fmt.Scan(&passWord)
if userName == "root" && passWord == "123" {
fmt.Println("登陆成功")
} else {
fmt.Println("登陆失败")
}
}
流程控制语句之多分支语句
package main
func main() {
// 多分枝
// 1、多分支 if - else if - else if ....else
/*
var score int
fmt.Print("请输入你的成绩:")
fmt.Scan(&score)
if score < 0 || score > 100 {
fmt.Println("你的成绩不正确")
} else if score > 90 {
fmt.Println("成绩优秀")
} else if score > 60 {
fmt.Println("成绩良好")
} else {
fmt.Println("成绩不及格")
}
*/
/*
var week int
fmt.Print("请输入星期的数字:")
fmt.Scan(&week)
if week == 0 {
fmt.Println("星期日")
} else if week == 1 {
fmt.Println("星期一")
} else if week == 2 {
fmt.Println("星期二")
} else if week == 3 {
fmt.Println("星期三")
} else if week == 4 {
fmt.Println("星期四")
} else if week == 5 {
fmt.Println("星期五")
} else if week == 6 {
fmt.Println("星期六")
} else {
fmt.Println("输入不合法")
}
*/
// 2、switch语句,switch值判断
/*
var week int
fmt.Print("请输入星期的数字:")
fmt.Scan(&week)
switch week {
case 0:
fmt.Println("星期日")
case 1:
fmt.Println("星期一")
case 2:
fmt.Println("星期二")
case 3:
fmt.Println("星期三")
case 4:
fmt.Println("星期四")
case 5:
fmt.Println("星期五")
case 6:
fmt.Println("星期六")
default:
fmt.Println("非法输入")
}
*/
}
星座案例
package main
import (
"fmt"
"os"
)
func main() {
var month, day int
fmt.Print("请输入生日的月和日:")
fmt.Scan(&month, &day)
var xingZuo string
if day < 1 || day > 31 {
fmt.Println("输入的日有问题")
os.Exit(0)
}
switch month {
case 1:
// 日判断
if day >= 1 && day <= 19 {
xingZuo = "摩羯座"
} else {
xingZuo = "水瓶座"
}
case 2:
// 日判断
if day >= 1 && day <= 18 {
xingZuo = "水瓶座"
} else {
xingZuo = "双鱼座"
}
case 3:
// 日判断
if day >= 1 && day <= 20 {
xingZuo = "双鱼座"
} else {
xingZuo = "白羊座"
}
case 4:
// 日判断
if day >= 1 && day <= 19 {
xingZuo = "白羊座"
} else {
xingZuo = "金牛座"
}
case 5:
// 日判断
if day >= 1 && day <= 20 {
xingZuo = "金牛座"
} else {
xingZuo = "双子座"
}
case 6:
// 日判断
if day >= 1 && day <= 21 {
xingZuo = "双子座"
} else {
xingZuo = "巨蟹座"
}
case 7:
// 日判断
if day >= 1 && day <= 22 {
xingZuo = "巨蟹座"
} else {
xingZuo = "狮子座"
}
case 8:
// 日判断
if day >= 1 && day <= 22 {
xingZuo = "狮子座"
} else {
xingZuo = "处女座"
}
case 9:
// 日判断
if day >= 1 && day <= 22 {
xingZuo = "处女座"
} else {
xingZuo = "天秤座"
}
case 10:
// 日判断
if day >= 1 && day <= 23 {
xingZuo = "天秤座"
} else {
xingZuo = "天蝎座"
}
case 11:
// 日判断
if day >= 1 && day <= 22 {
xingZuo = "天蝎座"
} else {
xingZuo = "射手座"
}
case 12:
// 日判断
if day >= 1 && day <= 21 {
xingZuo = "射手座"
} else {
xingZuo = "摩羯座"
}
default:
fmt.Println("输入的月份有问题")
}
fmt.Println("您的星座是:", xingZuo)
}
分支语句嵌套
package main
import "fmt"
func main() {
var username, password string
fmt.Print("输入用户名和密码:")
fmt.Scan(&username, &password)
if username == "root" && password == "123" {
var score int
fmt.Print("请输入你的成绩:")
fmt.Scan(&score)
if score < 0 || score > 100 {
fmt.Println("你的成绩不正确")
} else if score > 90 {
fmt.Println("成绩优秀")
} else if score > 60 {
fmt.Println("成绩良好")
} else {
fmt.Println("成绩不及格")
}
} else {
fmt.Println("用户名或密码错误!")
}
}
循环语句
package main
func main() {
/*
for 表达式 { 循环语句 }
*/
/*
// 循环10次
var count = 0
for count < 10 {
fmt.Println(count)
count++
}
*/
/*
// 打印1-100
var count = 0
for count < 100 {
count++
fmt.Println(count)
}
*/
/*
// 打印100-1
var count = 100
for count > 0 {
fmt.Println(count)
count--
}
*/
/*
// 三要素for循环
var count = 0 //初始语句
for count < 10 { // 条件表达式
fmt.Println(count)
count++ // 步进语句
}
*/
/*
// 执行顺序为:count:=0 -> count<100 -> 循环体语句 -> count++ -> count<100 -> 循环体语句 -> count++.......count>100 -> break
for count := 0; count < 10; count++ {
// 循环体语句
fmt.Println(count)
}
*/
/*
// 基于循环,实现打印 1+2+3+4...+100
var s = 0
for count := 1; count < 100; count++ {
s += count
}
fmt.Println(s)
*/
}
循环语句和分支语句之间的嵌套
package main
import "fmt"
func main() {
/*
// 循环语句中嵌套分支语句
for count := 1; count < 100; count++ {
if count%2 == 0 { //判断是否为偶数
fmt.Println(count)
}
}
*/
// 分支语句中嵌套循环语句
for true {
var num int
fmt.Print("请输入一个正整数:")
fmt.Scan(&num)
if num > 100 {
// 从小到大打印1-num
for i := 1; i <= num; i++ {
fmt.Println(i)
}
} else {
// 从大到小打印num-1
for i := num; i >= 1; i-- {
fmt.Println(i)
}
}
}
}
for循环的作用域
package main
import "fmt"
func foo() {
var y = 100
fmt.Println(y)
}
func main() {
for i := 0; i < 10; i++ {
fmt.Println(i)
}
//fmt.Println(i) // 这里无法获取到i的值
}
退出循环语句
package main
import "fmt"
func main() {
// 退出循环 break
/*
// 示例一
for i := 0; i < 10; i++ {
if i == 6 {
break
}
fmt.Println(i)
}
*/
/*
// 示例二
fmt.Printf(`
1、普通攻击
2、超级攻击
3、使用道具
4、逃跑
5、退出游戏
`)
for true {
var choice int
fmt.Printf("请输入选择:")
fmt.Scanln(&choice)
//fmt.Println(choice,reflect.TypeOf(choice))
if choice == 5 {
fmt.Println("游戏退出")
break
}
switch choice {
case 1:
fmt.Println("普通攻击")
case 2:
fmt.Println("超级攻击")
case 3:
fmt.Println("使用道具")
case 4:
fmt.Println("逃跑")
default:
fmt.Println("输入有误!")
}
}
*/
// countinue 退出当次循环
// 示例一
for i := 0; i < 10; i++ {
if i == 6 {
continue
}
fmt.Println(i)
}
}