这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
课程大纲:
本节课大纲:
走进GO语言基础
什么是GO语言
GO语言是Google出品的一门计算机通用编程语言。Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。
配置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