#后端go语言课程笔记|青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天,通过学习记录并总结部分知识点,不足之处请指正。 本章知识点有一下方面:
特点
- 简洁、快速、安全
- 并行、有趣、开源
- 内存管理、数组安全、编译迅速
- 高性能,高并发
- 语法简单,学习路线平缓
- 完整的工具链
- 快速编译
- 跨平台
- 垃圾回收
- 静态链接
语言结构
Go 语言的基础组成有以下几个部分:
- 包声明
- 引入包
- 函数
- 变量
- 语句 & 表达式
- 注释
举例
第一个 Go 程序 hello.go(Go 语言源文件的扩展是 .go),代码如下:
import "fmt"
func main() {
fmt.Print("hello world")
}
注意
需要注意的是 { 不能单独放在一行,所以以下代码在运行时会产生错误:这点与我们之前学习接触到的形如java,c,c++等语言有很大不同。
package main
import "fmt"
func main()
{ // 错误,{ 不能在单独的行上
fmt.Println("Hello, World!")
}
基础语法
Go 程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号。
标识符
标识符用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母(AZ和az)数字(0~9)、下划线_组成的序列,但是第一个字符必须是字母或下划线而不能是数字。
字符串连接
Go 语言的字符串连接可以通过 + 实现:如
package main
import "fmt"
func main() {
fmt.Println("a" + "b")
}
注意:Go 语言中变量的声明必须使用空格隔开
如:
var a int;
格式化字符串
Go 语言中使用 fmt.Sprintf 或 fmt.Printf 格式化字符串并赋值给新串:
- Sprintf 根据格式化参数生成格式化的字符串并返回该字符串。
- Printf 根据格式化参数生成格式化的字符串并写入标准输出。
循环语句
与其他语言一样,go语言也具有循环语句,有着以下类型的循环处理语句:
| 循环类型 | 描述 |
|---|---|
| for循环 | 重复执行语句块 |
| 循环嵌套 | 在 for 循环中嵌套一个或多个 for 循环 |
如:
import "fmt"
func main() {
i := 1
for {
fmt.Print("loop")
break
}
for j := 7; j < 9; j++ {
fmt.Println(j)
}
for n := 0; n < 5; n++ {
if n%2 == 0 {
continue
}
fmt.Println(n)
}
for i <= 3 {
fmt.Println(i)
i = i + 1
}
}
go与其他语言一样,有着可以进行控制的循环体语句执行的结果。控制语句如下:
| 控制语句 | 描述 |
|---|---|
| break语句 | 经常用于中断当前 for 循环或跳出 switch 语句 |
| continue语句 | 跳过当前循环的剩余语句,然后继续进行下一轮循环。 |
| goto语句 | 将控制转移到被标记的语句。 |
函数
函数是基本的代码块,用于执行一个任务。Go 语言至少有个 main() 函数。可以通过函数来划分不同功能,每个函数执行的是指定的任务。函数声明告诉了编译器函数的名称、返回类型和参数。
定义
- func:函数由 func 开始声明
- 函数体:函数定义的代码集合。
如:
/* 函数返回两个数的最大值 */
func max(num1, num2 int) int {
/* 声明局部变作为中间量 */
var num3 int
if (num1 > num2) {
num3 = num1
} else {
num3 = num2
}
return num3
}
调用
当创建函数时,定义了函数需要做什么,通过调用该函数来执行指定任务。调用函数,向函数传递参数,并返回值,例如:
package main
import "fmt"
func main() {
/* 定义局部变量 */
var a int = 100
var b int = 200
var ret int
/* 调用函数并返回最大值 */
ret = max(a, b)
fmt.Printf( "最大值是 : %d\n", ret )
}
/* 函数返回两个数的最大值 */
func max(num1, num2 int) int {
/* 声明局部变作为中间量 */
var num3 int
if (num1 > num2) {
num3 = num1
} else {
num3 = num2
}
return num3
}
用法
| 用法 | 描述 |
|---|---|
| 函数作为另一个函数的实参 | 函数定义后可作为另外一个函数的实参数传入 |
| 闭包 | 闭包是匿名函数,可在动态编程中使用 |
| 方法 | 方法就是一个包含了接受者的函数 |
| 课后练习期间的发现自己对于SOCKS5部分的学习以及掌握方面不足,需要在接下来的学习中更加努力。 |
注意:文章中的表格总结参考于菜鸟教程。曾在自学期间学习过知识点。记录下来部分知识点便于自身学习。