青训营伴学笔记——Go 语言基础 | 青训营笔记

57 阅读5分钟

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

课程大纲: image.png

本节课大纲:

image.png

走进GO语言基础

什么是GO语言

GO语言是Google出品的一门计算机通用编程语言。Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。

image.png

配置GO开发环境

第一步,在GO官网安装Golang

第二步,配置集成开发环境:VSCode/Goland/基于云的开发环境

基础语法

文件名以go作为拓展名

package main// main包就是程序的入口包
import (
    "fmt"
)// 导入标准库fmt,字符输入输出库
func main() {
    fmt.Println("hello world")
}

运行:

go run 文件名

编译并运行:

go build 文件名

运行可执行文件

./main

变量

常见的变量类型有:字符串 整数 浮点数 布尔类型等

go中字符串是内置类型,可以通过+进行拼接(和c/cpp一致)

var声明语句可以创建一个指定类型的变量,然后给变量附加一个名字,并且设置变量的初始值。变量声明的一般语法如下:

var 变量名 类型 = 初始值

go中还支持简短变量声明,变量的类型根据表达式来自动推导。这样写有些像Python的变量声明方式

变量名 := 初始值

常量的话就是将var修改为const,具体类型通过上下文自动推断

if else 语句

这个与c++类似只不过go省略了括号,还有一点就是必须后面要有大括号。

if 条件 {
    执行语句
} else if 条件 {
    执行语句
} else {
    执行语句
}

循环语句

go里面仅有一种循环关键词就是for,但是他有多种不同的形式来适应不同的用处。 for紧跟大括号就是表示死循环

for {
    执行语句
}

for后面跟条件语句再跟大括号就类似于while语句

for 条件 {

}

还有种用法和c++的for类似,这三个也都可以任意省略

for 初始化; 条件; 赋值表达式 {
    循环
}

switch 语句

switch 分支结构与c++中的很相似,同样也是不需要括号,最大的区别是go里面不需要break也不会自动向下执行语句。甚至可以任意替换 if else 语句,可以使逻辑更加清晰。

switch 变量 {
case 常量:
    执行语句
...
default:
    执行语句
}

数组

GO中的数组类似于C++中的数组,其长度是固定的使用比较不灵活,所以一般情况下用切片会多一些。 数组声明:

var 变量名 [SIZE] 变量类型

其中SIZE必须为常量。

数组的初始化:

var 变量名 = [SIZE]变量类型{初始值0, 初始值1, ...}

如果数组长度不确定,可以使用 ... 代替数组的长度,编译器会根据元素个数自行推断数组的长度:

var 变量名 = [...]变量类型{初始值0, 初始值1, ..., }

变量名 :=[...]变量类型{初始值0, 初始值1, ..., }

切片

Go 中的切片是对数组的抽象。

Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片(动态数组),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。 就比较类似于C++ STL 中的 vector 了.

定义切片: 可以声明一个为指定大小的数字定义切片:

var 变量名 []类型

或者使用make函数创建切片,其中容量可以省略

var 变量名 []类型 = make([]类型, 长度, 容量)

也可以简写为

变量名 := make([]类型, 长度, 容量)

它内部实现的数据结构通过指针引用底层数组。所以容量与长度不同,容量表示底层数组的大小,长度是你可以使用的大小。 容量的用途是,在数据拷贝和内存申请的消耗与内存占用之间提供一个权衡。用 append扩展长度时,如果新的长度小于容量,不会更换底层数组,否则,go 会新申请一个底层数组,拷贝这边的值过去,把原来的数组丢掉。

切片初始化:

变量名 :=[] 类型 {初始值0, 初始值1, ...}

append是在切片后面追加元素,追加元素数量可以是多个。

变量 = append(变量, 追加元素)

copy是想其中一个切片内容复制到另一个切片中,如果想增加切片的容量,那么就使用copy到大容量的切片中。

// 切片0复制到切片1
copy(切片1, 切片0)

map

在其他语言中这个叫做哈希或者字典。 map 是一种无序的键值对的集合。map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。 遍历它。不过,在go中 map 是无序的,无法决定它的返回顺序,这是因为 map 是使用 hash 表来实现的。

//声明变量,默认 map 是 nil
var 变量名称 map[关键字类型] 值数据类型
// 使用 mak e函数
变量名称 := make(map[关键字类型] 值数据类型)

delete() 函数用于删除集合的元素, 参数为 map 和其对应的 key 当访问map时有两个参数

值, 是否存在 = map变量[关键字]

不存在的话第二个变量为false,值为0