day01
一、基础
1. //单行注释
2. /*
多行注释
*/
3. 语句结尾没有分号
4. 调用函数大部分需要导入包
5. 左括号必须与函数名同行
6. 程序必须有一个main包
7. go语言以包做为管理单位
8 每个文件必须先声明包
二、变量
9. 变量命名规范
1>字母、下划线、数字组成
2>不能以数字开头
3>不能为关键字
4>区分大小写
10. 变量声明了必须得使用
11. var 变量名 类型(var a int)
var a=10
12. 同一大括号里声明的变量名是唯一的
13. 可同时声明多个变量var 变量名1,变量名2…… 类型
14. 自动推导类型(常用 *,也是一种声明方式)
c := 30
fmt.Printf("c Type is %T\n") %T打印变量所属类型
15. 多重赋值
a , b ,c := 10,20,30
变量值交换
a,b := 10,20
a,b = b,a
16. _匿名变量,丢弃数据不处理。
a, b := 10, 20
temp, _ := a, b
fmt.Println(temp) 10
fmt.Println(a) 10
fmt.Println(b) 20
匿名变量配合函数返回值使用,才有优势
func test(a ,b ,c int){
return 10, 20,30
}
var i,j ,k
i,j,k = test()
i,_,k=test()
17. 多个变量定义
var(
a int
b float
)
var(
a int =1
b float =1.1
)
自动推导类型
var(
a =1
b =1.1
)
三、常量
18. 常量声明 const 常量名 类型(var a int)
const a = 10
19. 多个常量定义
const(
a int
b float
)
const(
a int =1
b float =1.1
)
自动推导类型
const(
a =1
b =1.1
)
四、枚举
20. iota常量自动生成器,第个一行 ,自动加1
21. iota给常量赋值使用
22. const (
a = iota //0
b = iota //1
c = iota //2
)
//iota遇到const重置 为0
const d= iota //0
23.//可以只写一个iota
const(
a = iota //0
b //1
c //2
)
24. iota同一行,值都一样
const(
i=iota //0
j1,j2,j3=iota,iota,iota //j1,j2,j3都为1
k=iota //2
)
五、数据类型
25.
类型 名称 长度 默认值 说明
bool 布尔 1 false 不可用数字代表
byte 字节 1 0 uint8(主要用于放英文字符)
rune 字符 4 0 uint32(存储unicode编码如中文)
int/uint 整型 4或8 0 32位或64位
int8/uint8 整型 1 0 -128~127/0~255
int16/uint16 整型 2 0 -32768~32767/0~65535
int32/uint64 整型 4 0 -21亿~21亿/0~42亿
int64/uint64 整型 8 0
float32 浮点 4 0.0 32位浮点(小数位精确到7位)
float64 浮点 8 0.0 64位浮点(小数位精确到15位)
complex64 复数 8
complex128 复数 16
uintptr 整型 4或8 足于存储指针的uint32或uint64整数
string 字符串 "" utf-8字符串
26. 浮点
var a float32 =3.14
b := 3.14
b的类型为float64。float64比float32精度要高
27. byte字符
//结果是一样的
var a byte
a=97
a='a'
fmt.Printf("%c,%d\n") //%c以字符方式打印,%d以整型方式打印,直接打印为ASCII码
//大小写转换直接可以通过+进行
'A'+32
'a'-32
28. 字符串
字符串隐藏了一个结束符“\0”
var str string
str="zhao"
fmt.Println(len(str)) //结果为4。len是一个内建函数可以计算字符串长度,有多少个字符
fmt.Println(str[0]) //z
fmt.Println(str[1]) //h
fmt.Println(str[3]) //0
29. 复数类型
var t complex128
t=2.1+3.14i
fmt.Println(t) // (2.1+3.14i)
fmt.Println(real(t)) //输出实部 2.1
fmt.Println(imag(t)) //输出虚部 3.14
30. 键盘输入
fmt.Scanf("&d",&a)
fmt.Scanf(&a)
31. 类型转换
不是所有类型都可以转(相互兼容的才可以转)
bool不能和int相互转换
byte和int可以转换
var ch byte
ch='a'
var a int
a=int(ch)
32. 类型别名
type bigInt int64 //给int64取个别名为bigInt
var bigInt a //等价于 int64 a
fmt.Printf("%T",a) // main.bigInt
type( //取多个别名
bigInt int64
char byte
)
六、结构运算
33. 算术运算符
运算徐 术语 示例 结果
+ 加 1+1 2
- 减 2-1 1
* 乘 1*3 3
/ 除 4/2 2
% 取模余 10%3 1
++ 后自增,没有前自增 a=0;a++ 1
-- 后自减,没有前自减 a=2;a-- 1
34. 关系运算符
运算徐 术语 示例 结果
== 等于 4==3 false
!= 不等于 4!=3 true
< 小于 4<3 fasle
> 大于 4>3 true
<= 小于等于 4<=3 false
>= 大于等于 4>=3 true
35. 逻辑运算符
运算徐 术语 示例 结果
! 非 !a a为true时false,a为false时true
&& 与 a&&b a和b都为是时true,否则为false
|| 或 a||b a和b有一为真时true,否则false
36. 位运算符
运算徐 术语 示例 结果
& 按位与
| 按位或
^ 异或
<< 左移 左移n位,相当于乘以2的n次方,左边弃位,右边补位 4<<2 ,=16
>> 右移 右移n位,相当于除以2的n次方,右边弃位,左边补位 4>>2 ,=1
37. 赋值运算符
运算徐 示例 说明
= 普通赋值
+=
-=
*=
/=
%=
<<=
>>=
&=
|=
^=
38. 选择结构(if语句)
str := "zhao"
if str == "zhao"{
fmt.Println("哈哈") //输出 哈哈
}
if支持一个初始化语句
if str:="zhao";str == "zhao"{
fmt.Println("哈哈") //输出 哈哈
}
分支
if str:="zhao";str == "zhao"{
fmt.Println("哈哈") //输出 哈哈
} else{
fmt.Println("不等于")
}
分支
if str:="zhao";str == "zhao"{
fmt.Println("哈哈") //输出 哈哈
} else if str == "hao"{
fmt.Println("不等于")
}else{
fmt.Println("都不等于")
}
39. 选择结构(switch语句)
break:默认不写
fallthrough与break一样,但是不会跳出switch语句(而且后面无条件执行)
支持一个初始化语句switch a:=10;a
num := 3
switch num{
case 1:
fmt.Println("1")
case 2:
fmt.Println("2")
case 3:
fmt.Println("3")
default:
fmt.Println("其他")
}
case后可以跟 多个
num := 3
switch num{
case 1,2,3:
fmt.Println("1")
case 4:
fmt.Println("2")
case 5,6:
fmt.Println("3")
default:
fmt.Println("其他")
}
可以加条件
num := 3
switch {
case num >1:
fmt.Println("1")
case num >2:
fmt.Println("2")
case num >3:
fmt.Println("3")
default:
fmt.Println("其他")
}
40. 循环结构(for语句)
sum := 0
for i := 0; i<=100: i++{
sum+=i
}
fmt.Println(sum)
41. 循环结构(range语句)
迭代语句配合数组和切分使用
str := "abcd"
for i := 0; i < len(str); i++ {
fmt.Printf("%c\n", str[i])
}
//迭代返回两个值,一个是元素位置(i),一个是元素本身(data)
for i, data := range str {
fmt.Printf("%d,%c\n", i, data)
}
//只返回元素位置,元素本身默认丢弃
for i := range str {
fmt.Printf("%c\n", str[i])
}
for i, _ := range str {
fmt.Printf("%c\n", str[i])
}
42. 跳转语句(break和continue和goto)
break可用于for、switch、select
continue只能用于for循环
goto能用玩任何地方,但是不能跨函数(使用注意可能会造成死循环)
i :=0
for{ //for后面不写条件,就是循环
i++
if i==5{
break; //跳出最近的内循环
continue: //跳过本次循环
}
fmt.Println(i)
}
fmt.Println("begin")
goto End
fmt.Println("end")
End:
fmt.Println("goto End")