Go基础语法 | 青训营笔记

52 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

一.本堂课重点内容

本堂课讲了golang的一些语言特点和基本语法

二.详细知识点介绍

1.第一个go程序-hello world

package main //声明本代码文件属于 main 包

import ( //导入外部或者标准库 使用括号可以导入多个包
	"fmt" //format包
)

func main() { //func 声明函数 main
	fmt.Println("hello world")
}

运行go程序:使用go run可直接编译+运行

gitpod /workspace/go-by-example/example/01-hello (master) $ go run mnain.go
hello world

2.变量声明

使用var声明变量,const声明常量,感觉上和JAVA类似(可惜没学过JAVA)

和C++不同的是,声明变量var关键字和变量类型关键字分开使用

格式类似 var 变量名 变量类型关键字

与py相似,声明变量可以不包含关键字,根据变量赋值,编译器自动判断变量类型

变量名 := 变量值

要注意的是,全局变量和外部变量在声明时需要加上 var 关键字

3.循环语句

golang中无while循环

for语句:语法与C++类似,可使用for 初始化;终止条件;变更 {内部代码}格式定义循环,注意for后条件无括号,且可以无条件

for语句可以搭配switch语句实现类似socket监听功能

switch语句:

基本语法为switch 变量 { case 值: 执行代码 },与C++不同的是,不需要在每个case后执行代码末尾加break,会自行在执行case后跳转至结束

4.切片

切片slice是go比较有特色的一种动态数组结构,和C++的vector类似但是每次扩容若小于1024个元素则为2倍,大于则是1.25倍,类似将vector增长因子进行优化,其中切片的动态增长是使用内置函数append进行实现,关于slice的操作具有很高的自由度,可以在数组任意位置进行任意更改,虽然大部分的操作复杂度都是o(n),但是如在尾部append等经典操作复杂度还是维持在常数级别

slice创建基本语法为:

var 数组名 []元素变量类型 //声明

var slice1 []type = make([]type, len) //make函数创建slice类型分配给slice变量

三.实战练习例子

练习了上述内容所包含的基本语法,根据老师提供的在线编译平台gitpod和本地vscode进行编译运行

四.个人总结

掘金课程上说golang自带垃圾回收系统,之前了解到回收机制为三色标记法(+混合写屏障)

三色标记法略类似python和JAVA垃圾回收的中的分代回收,不过没有分代回收复杂,大致为将区块分为标记等待状态(灰)、已被标记状态(黑)和未标记状态(白),触发GC是将白色对象回收,其思想略类似于内存替换算法中的时钟算法,不知道我理解的有多少偏差()

五.引用参考

参考网课(www.bilibili.com/video/BV1gf…)