1.字符和字符串
func main0101() {
var b string ="hello\077world"
fmt.Println(b)
}
func main() {
var a byte ='a'
var b string ="a"//'a''\0'
fmt.Println(a==b)
}
不能比较
func main() {
//var a byte ='a'
//var b string ="a"//'a''\0'
//换行\n \\表示一个\ 一遍用于文件操作
//var b string ="hello\nworld"
var b string = "hello\077world"
//%s 遇到\0停止
//fmt.Printf("%s",b)
fmt.Println(b)
//fmt.Println(a==b)
}
func main0102() {
//var str string="hello world"
//在go语言中一个汉字算作3个字符 为了和linux同一处理
var str string = "我爱你woaini"
//计算字符串个数
num := len(str) //4 //8 //12
fmt.Println(num)
}
2.占位符
func main0201() {
//var a int64 =10
a:=10//int
fmt.Printf("%d\n",a)
//var b float64 =10
b:=10.0//float64
//b:=10//int
fmt.Printf("%f\n",b)
var c bool =true
fmt.Printf("%t\n",c)
var d byte ='A'
fmt.Printf("%c\n",d)
var e string ="hello"
fmt.Printf("%s\n",e)
fmt.Printf("%p\n",&a)
//%T 打印变量对应的数据类型
fmt.Printf("%T\n",a)
fmt.Printf("%T\n",b)
fmt.Printf("%T\n",c)
fmt.Printf("%T\n",d)
fmt.Printf("%T\n",e)
//%% 会打印一个%
fmt.Printf("35%%")
}
func main() {
//计算机能够识别的进制 二进制 八进制 十进制 十六进制
a := 123 //十进制数据
b := 0123 //八进制数据 以0开头的数据是八进制
c := 0xabc //十六进制 以0x开头的数据是十六进制
//go语言中不能直接表示二进制数据
//fmt.Println(a)
//fmt.Println(b)
//fmt.Println(c)
//%b 占位符 表示输出一个二进制数据
//fmt.Printf("二进制值为:%b\n",a)
//fmt.Printf("二进制值为:%b\n",b)
//fmt.Printf("二进制值为:%b\n",c)
//%o 占位符 表示输出一个八进制数据
//fmt.Printf("%o\n",a)
//fmt.Printf("%o\n",b)
//fmt.Printf("%o\n",c)
//%x %X 占位符 表示输出一个十六进制数据
fmt.Printf("%X\n", a)
fmt.Printf("%X\n", b)
fmt.Printf("%X\n", c)
s := ' '
fmt.Printf("%T", s)
}
3.常量
func main0301() {
//常量定义和使用
//在程序运行过程中其值不能发生改变的量 成为常量
//常量的存储位置在数据区
//栈区 系统为每一个应用程序分配1M空间用来存储变量 在程序运行结束系统会自动释放
var s1 int =10
var s2 int =20
//常量的存储位置在数据区 不能通过& 取地址来访问
const a int = 10
fmt.Println(&s1)
fmt.Println(&s2)
//a=20//常量的值不允许修改
fmt.Println(a)
}
func main0302() {
//常量一般用大写字母表示
const MAX int = 10
b := 20
c := MAX + b
fmt.Println(c)
//字面常量
fmt.Println(123)
fmt.Println("hello world")
//硬常量 32
d := c + 32
e := "hello"
e = e + "world"
fmt.Println(d)
fmt.Println(e)
}
4.枚举
func main() {
const (
a = iota //0//静止
b = iota //1//移动
c = iota //2//普通攻击
d = iota
)
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
//定义变量 为 状态
value := a
fmt.Println(value)
value = b
fmt.Println(value)
}
func main() {
//const(
// a=iota//0
// b//1
// c//2
// d//3
// e//4
//)
//如果定义枚举是常量写在同一行值相同 换一行值加一
//在定义枚举时可以为其赋初始值 但是换行后不会根据值增长
const (
a = 10
b, c = iota, iota
d, e
)
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
fmt.Println(e)
}
5.算术运算符
除法运算符:
//除法运算符
func main0501() {
a:=10//int
b:=0//int
//整型数据相除结果为整型
//除数不能为0
c:=a/b
fmt.Println(c)
}
取余运算符:
//取余运算符
func main0502(){
a:=10
b:=2
//取余运算符 取模运算符
//取余运算符只能用于整型数据
//取余运算符除数不能为0
c:=a%b
fmt.Println(c)
}
自增自减运算符:
//自增自减运算符
func main0503(){
a:=10
//a=a+1
//++ --只能写在变量的后面 叫做后自增后自减
//a++//自增运算符
//a--//自减运算符
//不能将自增自减运用在表达式中
//b=a--//err
fmt.Println(a)
//fmt.Println(b)
}
6.类型转换
func main0601() {
a:=10
b:=3.99
//将不同类型转成相同类型进行计算操作
//类型转换格式 数据类型(变量) 数据类型(表达式)
//c:=float64(a)*b
//将浮点型转成整型数据 保留浮点型整数部分 舍弃小数部分 不会进行四舍五入
c:=a*int(b)
fmt.Println(c)
}
func main0602() {
//虽然int32和int64都是整型 单数不允许相互转换
//只有类型匹配的数据才能进行计算
//在go语言中习惯将低类型转成高类型 保证数据完整性
var a int32 = 10
var b int64 = 20
c := int64(a) + b
fmt.Println(c)
fmt.Printf("%T", c)
}
编程实现107653秒是几天几小时几分钟几秒:
func main0603() {
//fmt.Printf("%d周%d天\n",46/7,46%7)
//编程实现107653秒是几天几小时几分钟几秒?
//miao:=107653
//fenzhong:=miao/60
//xiaoshi:=fenzhong/60
//tian:=xiaoshi/24
//time:=107653
//fmt.Println("天:",time/60/60/24%365)
//fmt.Println("时:",time/60/60%24)
//fmt.Println("分:",time/60%60)
//fmt.Println("秒:",time%60)
}
7.赋值运算符
func main0701() {
a:=10
//a=a+5
//a += 5
//a-=5
//a*=5
//a/=5
//a%=5 a=a%5
//a += 5*3//a=a+5*3
//a+=5*a //a=a+5*a a++
b:=a+5*a
fmt.Println(a)
fmt.Println(b)
}
8.比较运算符
func main08() {
//关系运算符用于程序中的逻辑判断 返回值为布尔类型
a := 10
//b := 20
//==相等于 相同于
//fmt.Println(a==b)
//fmt.Println(a<b)
//>= 大运等于运算符 <= 小于等于运算符
//fmt.Println(a<=b)
//不等于 !=
fmt.Println(a)
}
9.逻辑运算符
func main0901() {
//逻辑非 ! 非真为假 非假为真
//只能对bool类型变量或者bool类型表达式使用逻辑非运算符
var a bool =false
a=true
b:=20
c:=20
fmt.Println(!(b==c))
//fmt.Println(!b)//err
fmt.Println(!a)
}
func main0902() {
//逻辑与 && 表达式1 && 表达式2 同真为真 其余为假
a:=10
b:=20
c:=30
d:=20
fmt.Println(a>b && c<d)
}
func main0903(){
//逻辑或 || 表达式1 || 表达式2 同假为假 其余为真
a:=10
b:=20
c:=30
d:=20
fmt.Println(a<b || c>d)
}
func main0904(){
//去地址运算符
//var a int =10
//fmt.Println(&a)
a:=10
//指针变量
p:=&a
//* 取值运算符
fmt.Println(*p)
}
10.运算符优先级
//括号 () 结构体成员. 数组下标[]
//单目运算符
//逻辑非! 取地址& 取值* 自增++ 自减--
//双目运算符
//乘除 * / %
//加减 + -
//关系 == != > >= < <=
//逻辑 || &&
//赋值 = += -= *= /= %=
11.条件语句
func main1101(){
var score int
fmt.Scan(&score)
//if 条件判断根据是否满足条件指向对应的代码
//else 作为if 补充条件 如果条件不满足执行else代码
//格式 if 表达式{
// 代码体
// }else {
// 代码体
//}
if score >700 {
fmt.Println("我要上清华")
} else{
fmt.Println("我要上蓝翔")
}
}
注意:{必须紧跟在if判断后
func main1102(){
var score int
fmt.Println("请输入分数")
fmt.Scan(&score)
//if else if
//else 配对和if 一起使用 选择同级别下的if进行配对使用
if score>700{
fmt.Println("我要上清华")
if score >720{
fmt.Println("我要学习挖掘机")
}else if score >710{
fmt.Println("我要学习美容美发")
}else {
fmt.Println("我要学习计算机")
}
} else if score >680{
fmt.Println("我要上北大")
if score > 690{
fmt.Println("我要学习盗墓")
}else if score >685{
fmt.Println("我要学习占卜")
}else{
fmt.Println("我要学习计算机")
}
} else if score >650{
fmt.Println("我爱你")
}else{
fmt.Println("我不爱你")
}
}
func main1103(){
a:=10
if a>5{
fmt.Println(a)
}
//采用就近原则 找到上面尚未配对的if进行匹配操作
if a>8{
fmt.Println(a)
}else {
fmt.Println("haha")
}
}
12.switch分支语句
func main1201() {
var w int
fmt.Scan(&w)
//swich中的只不能是浮点型数据 浮点型数据是一个约等于的数据
//switch 选择想可以是一个整型变量
switch w {
case 1:
fmt.Println("星期一")
case 2:
fmt.Println("星期二")
case 3:
fmt.Println("星期三")
case 4:
fmt.Println("星期四")
case 5:
fmt.Println("星期五")
case 6:
fmt.Println("星期六")
case 7:
fmt.Println("星期日")
//如果输入的值没有找到 默认进入default 中
default:
fmt.Println("输入错误")
}
//switch score>700 {
//case true:
// fmt.Println(score)
//case false:
// fmt.Println(score)
//}
}
func main1202() {
var score int
fmt.Println("请输入分数")
fmt.Scan(&score)
switch score / 10 {
case 10:
//fmt.Println("A")
fallthrough //让switch执行下一个分支的代码 如果不写 执行到下一个分支就会自动停止
case 9:
fmt.Println("A")
case 8:
fmt.Println("B")
case 7:
fmt.Println("C")
case 6:
fmt.Println("D")
default:
fmt.Println("E")
}
}