后端go语言课程笔记|青训营笔记

86 阅读3分钟

#后端go语言课程笔记|青训营笔记

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天,通过学习记录并总结部分知识点,不足之处请指正。 本章知识点有一下方面:

特点

  1. 简洁、快速、安全
  2. 并行、有趣、开源
  3. 内存管理、数组安全、编译迅速
  4. 高性能,高并发
  5. 语法简单,学习路线平缓
  6. 完整的工具链
  7. 快速编译
  8. 跨平台
  9. 垃圾回收
  10. 静态链接

语言结构

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部分的学习以及掌握方面不足,需要在接下来的学习中更加努力。

注意:文章中的表格总结参考于菜鸟教程。曾在自学期间学习过知识点。记录下来部分知识点便于自身学习。