包必须要加载src中
来的走 defer就最后一个走
defer 先声明就是最后一个执行 defer栈
循环: goto 关键字 是代码执行到goto的时候直接跳到关键字那里开始执行 代码
break 关键字 是代码执行到break的时候如果没有关键字则直接终止当前正在执行的循环,如果有关键字则直接从关键字那里直接终止。break关键字多用于 多次循环中使用
字符串用+来连接变量
字符串和字符 两种类型的比较
字符类型用单引号来定义 字符类型往往是一个字符
字符串类型用 双引号来定义 字符串类型往往是一个或者多个字符
一.直接用单引号来定义的话:
str1 := "a" //字符串类型
str2 := 'a' //字符类型 而且只能是一个字符
str3 := 97
fmt.Printf("str1的类型是%T,值是%s",str1,str1)//str1的类型是string,值是a
fmt.Printf("str2的类型是%T,值是%d",str2,str2)//str2的类型是int32,值是97
fmt.Printf("str3的类型是%T,值是%d",str3,str3)//str2的类型是int32,值是97
有两个疑惑:
第一个为什么上面的占位符一个是%s 一个是%d 因为str1是字符串类型 而str是字符类型 而字符类型是用整形去保存的所以要使用%d整形占位符
第二个是为什么类型变成int32 而值变成了97 因为计算机只能存数字而不能存字符,所以在ascll表中用97代表a 所以你存97和存a 是一样的
二.如果先声明字符的类型是 byte的话那么
var ch byte //声明字符类型
ch = 97
fmt.Printf("%c,%d,%v,%T\n",ch,ch,ch,ch) //a,97,97,uint8
ch = 'a' //字符是单引号
fmt.Printf("%c,%d,%v,%T\n",ch,ch,ch,ch) //a,97,97,uint8
还是相同的
如果不声明byte那么就会自定义成为int32
函数不可以有相同的名字
方法可以有但是接受者不一致