一、变量定义与使用
-
变量:在程序运行过程中其值能够改变的量 成为变量 变量存在内存中。
-
变量定义格式:
//声明: var 变量名 数据类型
例:var a int
//定义: var 变量名 数据类型 = 值
例:var a int = 10
//自动推导类型: 变量名:=值
例:a : = 3.5
//变量的类型不同不能进行计算 需要使用类型转换
//匿名变量:用下划线代替
- 格式化输入输出:
fmt.Println()//输出数据 自带换行
fmt.Print()//输出数据 不带换行
fmt.Printf()//格式化输出数据 %d 整型 %f 浮点型 %t 布尔类型 %s 字符串类型 %c 字符类型 %p 内存地址
fmt.Scan()输入数据 &变量 &取地址符号 空格或者回车作为接收结束
fmt.Scanf()//格式化输入数据,可以接收到空格
- 标识符命名规则:
1、只能以字母或下划线开头
2、只能使用字母 数字 下划线
3、区分大小写
4、不能使用系统关键字
5、见名知义
二、运算符
%c 打印字符类型数据
%d 打印整型类型数据
%f 打印浮点型数据 fmt.printf("%f") 默认保留六位小数%.2f 保留两位小数 对第三位四舍五入
%s 打印字符串类型
%p 打印变量地址(指针类型)
%t 打印布尔类型数据
%T 打印数据类型 a:=3.14 float64 a:=10 int a:='a'int32
%o 打印八进制整型数据
%x %X 打印十六进制整型数据 a-f A-F
%% 打印一个%
- 转义字符
'\n' 表示换行
'\\' 表示\
'\0' 表示字符串结束标志 ASCII值为0
-
字符与字符串
在go语言中,一个汉字算作三个字符,是为了和linux统一处理,在windows中一个汉字是两个字符。 -
常量
//格式:一般常量大写字母
const 常量名 数据类型=值
例:const PI float64 = 3.1415
常量的值在程序运行过程中其值不能发生改变
常在在内存中的数据区进行存储 变量是在内存中的栈区存储
系统为每一个应用程序分配了1M的内存空间存储变量和函数的信息
- 类型转换
①不同类型转换 如果将浮点型转成整型 会丢失精度 只会保留整数部分 不会四舍五入
②同一类型转换 建议将低类型转成高类型 防止数据丢失 【高位溢出】
③格式: 数据类型(变量) 数据类型(表达式)
- iota 枚举
//枚举一般用作于程序的流程控制
const(
a=iota //0
b,c=iota,iota//1
d=20//2
)
- 运算符:
1、算数运算符
加【+】 减【-】乘【*】 除【/】 两个相同类型的数据相除是得到的结果类型也相同 除数不能为0
取余【%】 取余只能对整型操作 除数不能为0
自增【++】自减【--】 go语言中只有后自增后自减 不能参与表达式计算(二义性??)
赋值运算符:
加等于【+=】 减等于【-=】乘等于【*=】除等于【/=】取余等于【%=】
2、比较运算符:
【>】【<】【>=】【<=】【==】【!=】
比较运算符返回值为bool类型 true false
3、逻辑运算符:
非【!】非真为假 非假为真
或【||】同假为假 其余为真
与【&&】同真为真 其余为假
4、其他运算符:
取地址【&】 对变量去地址是指针类型
取值运【*】 对指针变量取值
5、单目运算符
逻辑非! 取地址& 取值* 自增++ 自减--
6、双目运算符
乘除 * / %
加减 + -
关系 == != > >= < <=
逻辑 || && 注意 逻辑与高于逻辑或
赋值 = += -= *= /= %=
运算符优先级:
括号 () 结构体成员. 数组下标[]
三、条件语句
- if()语句
var a int = 10
if a < 20 {
fmt.Printf("a 小于 20\n" )
}
fmt.Printf("a 的值为 : %d\n", a)
- if…else语句
var age int
fmt.Print("请输入您的年龄:")
fmt.Scan(&age)
if age>18 {
fmt.Println("您可以进去")
}else {
fmt.Println("抱歉,您未满18岁!")
}
- if嵌套语句
var a int = 100
var b int = 200
if a == 100 {
if b == 200 {
fmt.Printf("a 的值为 100 , b 的值为 200\n" );
}
}
fmt.Printf("a 值为 : %d\n", a );
fmt.Printf("b 值为 : %d\n", b );
- switch语句
var grade int
fmt.Print("请输入您的成绩:")
fmt.Scan(&grade)
switch (grade / 10 % 10) {
case 9:
fmt.Println("优秀")
case 8:
fmt.Println("良好")
case 7:
fmt.Println("一般")
case 6:
fmt.Println("及格")
default:
fmt.Println("不及格")
}
- select语句
select 是 Go 中的一个控制结构,类似于用于通信的 switch 语句。每个 case 必须是一个通信操作,要么是发送要么是接收。select 随机执行一个可运行的 case。如果没有 case 可运行,它将阻塞,直到有 case 可运行。一个默认的子句应该总是可运行的。
select {
case communication clause :
statement(s);
case communication clause :
statement(s);
/* 你可以定义任意数量的 case */
default : /* 可选 */
statement(s);
}
四、循环语句
- for循环(三种写法)
sum := 0
for i := 0; i <= 10; i++ {
sum += i
}
fmt.Println(sum)
sum := 1
for ; sum <= 10; {
sum += sum
}
fmt.Println(sum)
// 这样写也可以,更像 While 语句形式
for sum <= 10{
sum += sum
}
fmt.Println(sum)
无限循环
sum := 0
for true {
sum++ // 无限循环下去
}
fmt.Println(sum) // 无法输出
- 循环嵌套
for m := 1; m < 10; m++ {
/* fmt.Printf("第%d次:\n",m) */
for n := 1; n <= m; n++ {
fmt.Printf("%dx%d=%d ",n,m,m*n)
}
fmt.Println("")
}
- break语句:经常用于中断当前 for 循环或跳出 switch 语句
var a int = 10
for a < 20 {
fmt.Printf("a 的值为 : %d\n", a);
a++;
if a > 15 {
/* 使用 break 语句跳出循环 */
break;
}
}
- continue语句:跳过当前循环的剩余语句,然后继续进行下一轮循环。
var a int = 10
for a < 20 {
if a == 15 {
/* 跳过此次循环 */
a = a + 1;
continue;
}
fmt.Printf("a 的值为 : %d\n", a);
a++;
}
- goto语句:将控制转移到被标记的语句。
var a int = 10
LOOP: for a < 20 {
if a == 15 {
/* 跳过迭代 */
a = a + 1
goto LOOP
}
fmt.Printf("a的值为 : %d\n", a)
a++
}