在笔记一 、从0到helloworld | 青训营中已经完成了go编译环境的搭建,接下来便是正式的go的学习。
注释
单行注释//
多行注释
/*
*/
可以看下面这个简单的例子
// 这是一个单行注释
/*
这是多行注释
这是多行注释
这是多行注释
*/
在vscode中可以用Ctrl + /的快捷键来进行多行注释,同样也是Ctrl + /可以取消注释。
输出
常用的输出方式有以下三种
print直接输出
printf 格式化输出
println 输出并换行
| 常用的格式化输出 | |
|---|---|
| %f | 浮点数 |
| %s | 字符串 |
| %d | 整数 |
| %v | 按原格式输出 |
| %+v | 在 %v 基础上,对结构体字段名和值进行展开 |
| %#v | 输出 Go 语言语法格式的值 |
变量常量
在go中变量用var来进行声明,var+变量名+变量类型
一般可以先声明再赋值,也可以声明的同时进行赋值。
在go中,基本数据类型可以省略,也可以用:=来简写。
//声明
var name string
var age int
var grade float32
var Is_student bool
//声明同时赋值
var birthday string = "20010826"
//自动推断类型类型
var id = 12
// := 简写
addr := "浙江"
如果有多个变量同时声明可以用批量声明来简写
var(
name string
age int
grade float32
Is_student bool
)
常量使用const来进行声明const name = "张三",也可以=像变量一样进行批量声明
const(
name = "张三"
age = 15
)
有一点值得注意的是:在go中声明了变量必须使用,不然会编译错误,而常量声明之后可以不使用。
在函数外使用的称为全局变量
在go中如果声明基本数据类型后没有赋值,会自动给出默认值。 数字型:0 ; 布尔型:false ; 字符串:"" 。
运算符
算术运算符
+、-、*、/、% 分别表示加、减、乘、除、取余
运算符中没有次方
go中自增只有后++,如果使用++i这种操作则会报错
位运算符
右移 >> , 左移 <<
var x uint8 = 0b10110101
//右移两位
fmt.Printf("x>>2 %b\n", x>>2) // x>>2 101101
//左移两位
fmt.Printf("x<<2 %b\n", x<<2) // x<<2 11010100
按位与 & , 按位或 | , 按位异或 ^
var a uint8 = 0b11110000
var b uint8 = 0b10101010
//按位与
fmt.Printf("a&b %b\n", a&b) // a&b 10100000
//按位或
fmt.Printf("a|b %b\n", a|b) // a|b 11111010
//按位异或
fmt.Printf("a^b %b\n", a^b) //a^b 1011010
赋值运算符
+=
-=
/=
*=
关系运算符
>
>=
<
<=
==
!=
逻辑运算符
&&
||
!
逻辑短路
&& 前面为false,则不往后判断,直接返回false
|| 前面为true,则不往后判断,直接返回true
判断语句
if else
条件不用加括号
if和{要在同一行
if score >= 60 {
fmt.Println("及格")
} else {
fmt.Println("不及格")
}
switch case
在go中,case里默认有break,不需要自己加
switch {
case score >= 90:
fmt.Println("优秀")
case score >= 80:
fmt.Println("良好")
case score >= 60:
fmt.Println("及格")
default:
fmt.Println("不及格")
}
循环
标准for循环
for 初始条件;结束条件;每次循环结束执行
for i := 1; i < 5; i += 2 {
fmt.Println(i)
}
条件循环
在go中没有while循环,可以用条件循环来代替
i := 1
for i < 10 {
i += 3
fmt.Println(i)
}
无限循环
for 后面不加参数即为无限循环
i = 0
for {
i ++
fmt.Println(i)
if i > 2 {
break
}
}
在for循环中有两个比较重要的关键词continue,break
continue跳过本次循环,continue后的语句不再执行
break 跳出当前循环